to post messages and comments.

можно ли каким-то образом в bash (а желательно POSIX sh) "унаследовать" функцию, т.е. допустим есть foo() { } я хочу переопределить foo, так, чтобы сначала вызывалась старая версия, а потом какие-нить доп действия?

Cumshot:
lid)
if [ $(echo "ibase=16;`echo $value | tr '[:lower:]' '[:upper:]'` % 2" | bc) == 0 ]; then
sleep 1
umask 0022
avconv -f video4linux2 -i /dev/video0 -f image2 -frames:v 1 /var/tmp/faces/face-`date +%s`.jpeg
else
DISPLAY=":0.0" xautolock -locknow
fi

Захотелось, запилилось, делюсь. Скрипт для конвертирования документов в pdf средствами openoffice/libreoffice и его открытия в читалке. Поставил средством открытия документов по умолчанию в DE.

[email protected]:~/bin$ cat openpdf
#!/bin/sh
# autoconvert with libreoffice / openoffice

# config
writer=lowriter
# or
#writer=oowriter

format=pdf

reader=evince


source_file="$*"
out_file=${source_file%.*}.$format

$writer --convert-to $format $source_file
$reader $out_file

# vi: ts=2 sw=2

Наткнулся на интересное поведение шелла. Он каким-то образом умеет вытаскивать и запускать функцию из другого процесса. Основной вопрос — как он это делает? И как это можно использовать на благо человечества?

Пример кода в комментариях

Нужен способ ограничить время выполнение команды ( > /dev/tcp/$ip/$port). То есть прибивать по истечению 5 секунд. Вариант с sleep $trime && kill $$ знаю, но не эстетично + лишний вывод в консольке, что не кошерно.

чтот я в этих переменных шелла совсем не понимаю:
$ find -name '*.hs'
./examples/type.hs
$ str="-name '*.hs'"
$ find $str
$

почему если предикат в переменной find ничего не находит?

Жуйк, помоги! Проблема такая: хочу в качестве шелла поставить юзеру шелл скрипт. Написал скрипт, установил его юзеру, а при логине все время permission denied. При этом если залогинится другим юзером и сделать su в того со скриптом — то все ок. Если этому юзеру поставить обычный шелл, зайти и запустить скрипт руками — все ок. Раньше такого не делал, какие тут могут быть подводные камни, а?

как запросить пароль из sh-скрипта?
в bash/zsh есть опция -s для этого, а в sh, судя по 'man 1p read', есть только -r.
я думал, что принято скрипты не-только-для-себя писать на sh, а тут такая подстава..
может есть какой-то super-read отдельным пакетом, а я не знаю, или еще что?

Я использую Ubuntu Linux вместо Debian в основном по одной причине. Оно умеет при попытке запуска в терминале программы которой нет в системе автоматически искать ее по не установленным пакетам и выдавать предложение поставить нужный пакет (правда командой apt-get вместо нормального aptitude). найти скрипт который отвечает за это автодейство мне не удалось. juick помоги его найти =)

а еще был один прикол с этим скриптом сегодня. в общем посоветовали мне одну программу (как бы dd со статусбаром, что не совсем правда), при этом названия точного не помня.
1) набираю в терминале:
#ddrescue
ddresсue: команда не найдена
2) вторая попытка:
#ddresque
Команда 'ddresque' не найдена, возможно вы имели в виду:
Команда 'ddrescue' из пакета 'gddrescue' (universe)

хотя должно было быть примерно так:
#ddrescue
Команда 'ddrescue' не найдена в системе:
Команда 'ddrescue' находится в пакете 'gddrescue' (universe)
выполните следующую команду для установки этого пакета:
sudo apt-get install gddrescue

как задавать умолчальные значения параметров запуска скрипта в самом скрипте?
чтобы если пользователь запустил скрипт у него применились умолчальные значения

Чтой-то сабжевый костыль (который w3crapcli.tk помер. RTMP-сервер отказывается отдавать контент по линкам. Оригинальный флешовый плеер же ругается, что у меня якобы плохой флеш (последний официальный под прыщи). Призываю пиратскую общественность.
rtmpdump -r "`Xtract '//rtmp/-' <(curl -sL "http://myspace.com/music/services/player?action=getSong&ptype=300&songId=$1")`" --swfVfy 'http://lads.myspacecdn.com/music/sdkwrapper/SDKWrapper.2.0.82.swf?aytatt=-1&sip=172.16.0.2&fadd=-1&logerr=0&yad=-1&on=1&ratt=-1&hash=MIGmBgkrBgEEAYI3WAOggZgwgZUGCisGAQQBgjdYAwGggYYwgYMCAwIAAQICZgMCAgDABAgnplwM4Ag1ngQQdgWYpGiAcoQguXuaItYqvgRY97w7Qi29'Раньше работало вот так. Теперь получаю
INFO: Connected...
ERROR: rtmp server sent error
ERROR: rtmp server requested close
Попробовал заменить адрес флешеговна на свежий:
‰ grep -o 'http://lads\.myspacecdn\.com/music[^"]*' knifecityny
lads.myspacecdn.com
Не помогло. Wireshark хинтов тоже не даёт, ибо флешеговно даже и не начинает тыкать rtmp.

‰ cat download-tracks
#!/bin/zsh
# Usage: $0 'The One Electronic'
mkdir -p "$1" || exit 1
cd "$1" || exit 1
for u in `Xtract '*//div/small/a/@href' <(curl -s "http://www.last.fm/music/${1// +}+tracks" | sed -e '/<!–\[if IE\]/d' | tidy -asxml 2>/dev/null | cat -v) | urldecode | urldecode`; do
wget "$u" -O "${${u##*/}//+/ }"
done
‰ cat num
#!/bin/bash
i=0
for f in "[email protected]"; do
mv "$f" "`printf '%04d' "$i"` $f"
: $(( i+=1 ))
done

почему такая фигня работает, как ожидается
(отрабатывает и печатает по мере поступления):
$ while : ; do echo "hi bu-bu" ; sleep 1 ; done | \
	sed -n 's/^hi \([^ ]*\).*$/\1/p
такая тоже:
$ while : ; do echo "hi bu-bu" ; sleep 1 ; done | \
	grep hi

а вот такая нифига не печатает?:
$ while : ; do echo "hi bu-bu" ; sleep 1 ; done | \
	grep hi | sed -n 's/^hi \([^ ]*\).*$/\1/p

? sh

Жуйк, а есть работающий на sh способ, узнать свой pid в 3 строчке? На bash решается через $BASHPID

1 echo $$
2 { ps ax | grep $0
3 echo $$
4 } &

@wyldrodney:
@Gem Посоны, руби позволяет спиздить всю жуйку с помощью 70 строк кода. Так-то! Ни одна тян не будет настолько же долгоиграющей и всегда податливой.
#1605515/17

@wasd:
@wyldrodney wget -r -l0 juick.com
ну и где теперь твой руби?
#1605515/21

@wyldrodney:
@wasd А как в этом поиск устроить или переход к посту?
#1605515/24

@wasd:
@wyldrodney grep
#1605515/25


посоны, зачем эти рубисты-штангисты-питонисты выёбываются, если всё уже написали до них?

такой тупой вопрос. Есть скрипт для чистки логов mysql. При прописывании в крон не срабатывает, точнее как, срабатывает(в логе крона видно, что он запускался), но результат ожидаемого нет. Зато при ручном запуске все впорядке.
Вот строчка из крона:
10 23 * /root/scripts/cleanmysql.sh
А вот сам скрипт:
#!/bin/sh

: > /var/db/mysql/billingbox.err

DBPASS=""
LOGTO=`mysql -u root -p${DBPASS} -e "show binary logs;" | egrep -E "mysql-bin.[0-9]{6}" | awk '{ print $1 }' | tail -n1`

echo $LOGTO

mysql -u root -p${DBPASS} -e "purge binary logs to '${LOGTO}';

А как на shell сделать, чтобы автоматически отвечало на вопросы системы? Ну вот допустим, мне нужно в скрипте прописать apt-get install somepackage, а он там спрашивает [Y/n], как в скрипте прописать, чтобы ответ шел Y?

Подскажите по такому вопросу. Запускается скрипт script.sh по крону, как сделать, чтобы скрипт узнавал свой PID (нужно чтобы он писал свой PID в лог, потому что скриптов может быть запущенно несколько)? Пробовал вот по такому делать PID=`ps -aef | grep "$program" | grep -v grep | awk '{print $2}'`, но скриптов может быть несколько экземпляров, а нужно именно, чтобы узнавал свой PID.

sh

загадочен мир командной строки. хочу распаковать кучу архивов, набираю unzip archive*.zip и распаковывается только archive001.zip, а на остальные ругается "filename not matched". после долгих мучений обнаружил, что проходит комбинация unzip 'archive*.zip'. а все потому, что первый аргумент unzip воспринимает как источник, то есть архив, а остальные — как файлы, которые нужно извлечь из архива. когда набираешь unzip archive*.zip оболочка делает свою работу, найдя в каталоге файлы соответствующие выражению и передает их имена утилите unzip в виде unzip archive001.zip archive002.zip archive002.zip ... а unzip понимает как "извлеки из archive001.zip файлы archive002.zip archive003.zip ...". ну и соответственно когда мы добавляем выражение archive*.zip в кавычки, то утилита unzip принимает все имена за один аргумент, как нам и нужно.