LINUX.ORG.RU

Bash тоже может быть комбайном


0

0

Вышел очередной патч bashdiff-1.16 для любителей экспериментировать с "башизмами". Этот патч добавляет оболочке bash-3.0 некоторые полезные возможности, заимствованные из Awk, Python, Zsh, Ksh.

С подробностями можно ознакомиться по следующей ссылке http://home.eol.ca/~parkw/index.html#...

Ссылка для скачивания http://home.eol.ca/~parkw/bashdiff/ba...

>>> Подробности

★★★★★

Проверено: Shaman007 ()

bash рулит

zsh фтопку, пока не научится с utf8 работать

anonymous
()
Ответ на: комментарий от Sun-ch

Младой человек - попуститесь, не исчите везде красноглазых багописателей. Уж что-что а баши слава богу с Юникса мало чем изменились. У виндовой консоли и то обратная несовместимость намного выше :)

Linfan ★★★★★
()

bash жил, живет и жить будет

anonymous
()
Ответ на: комментарий от Linfan

Простите, что не в тему. Про zsh что можите сказать? Стоит он того, чтобы его изучать? (Возможностей у него говорят много, так что он может mc за пояс заткнуть)

anonymous
()
Ответ на: комментарий от anonymous

побочный эффект привыкания к таким средам - тяжело работать под обычными башами на других машинах :)

вообще же рекомендую всем IPython - штука просто фантастическая и оставляет позади все известные доселе шеллы. Подробнее тут:
http://www.livejournal.com/users/vadim_kataev/9702.html

как вам например такие штучки:
for i in range(1,30):wget -c "http://dl.zvuki.ru/3/0692/mp3/${i}.mp3"

или вот такие:
$$a=ls
for i in a: cp ${i} ${i}.bak

и много чего ещё

vm ★★
()
Ответ на: комментарий от vm

>вообще же рекомендую всем IPython - штука просто фантастическая и оставляет позади все известные доселе шеллы.

действительно фантастика!

>как вам например такие штучки: for i in range(1,30):wget -c "http://dl.zvuki.ru/3/0692/mp3/${i}.mp3"

да также как и for i in `seq 1 30`; do wget -c "http://dl.zvuki.ru/3/0692/mp3/${i}.mp3" ; done

>или вот такие:$$a=ls; for i in a: cp ${i} ${i}.bak

for i in `ls`; do cp $i $i.bak ; done

то что я написал - sh, даже не bash.

аффтар, учи албанский

ngrechukh
()
Ответ на: комментарий от ngrechukh

ок. а например такие вот:
$$avi=ls -1 *.avi
$$srt=ls -1 *.srt
avisrt = ['mplayer "'+ x +'" -sub "'+y+'"' for x in avi for y in srt]

или так:
avisrt=map(dododo , avi, srt)
shell(avisrt[NUMBER_OF_VIDEO] + ' -subfps 24')

vm ★★
()
Ответ на: комментарий от vm

Ничего, в 1.17 и питоновских фишек пришьют (может быть) :)

Lumi ★★★★★
() автор топика
Ответ на: комментарий от vm

>$$avi=ls -1 *.avi $$srt=ls -1 *.srt avisrt = ['mplayer "'+ x +'" -sub "'+y+'"' for x in avi for y in srt]

и опять же for x in `ls *.avi`; for y in `*.srt`; do mplayer $x -sub $y; done

не совсем понял семантику последнего присваивания, но не суть важно.

>avisrt=map(dododo , avi, srt) shell(avisrt[NUMBER_OF_VIDEO] + ' -subfps 24')

а это да. но к башу можно написать макросы.

ngrechukh
()
Ответ на: комментарий от ngrechukh

иногда одномерных пайпов перестает хватать, приходится извращаться.

ngrechukh
()
Ответ на: комментарий от vm

2vm:

>всё можно, вопрос в удобочитаемости и простоте написания , в чём питону равных нет

По мне, так шеловские попроще читаются:)

Led ★★★☆☆
()
Ответ на: комментарий от Led

И так всегда Патч+патч да ещё и накладывается на патч

anonymous
()
Ответ на: комментарий от Led

>По мне, так шеловские попроще читаются:)

вот задачка требующая двухмерности: список mp3 и список текстовых файлов с тэгами. нужно: read A из одного источника и _одновременно_ read B из второго

красиво не получится, бо трубы одномерные.

ngrechukh
()

новость интерестно, но - сие есть изврат.
сейчас оболочка должна обеспечивать совместимость 
между системами - беремс linux/bsd , solaris, hpux, aix
/bin/sh - и что должны получить ? праально - posix shell..
и ничё более; максимум - более удобный user-интерфейс, то есть 
auto-complete, history, биндинги туда-сюда, но блин не разницу
в языке, тем более в таких нелепостях. Либо bash - системная оболочка,
либо породия на php|perl.

Лучше бы упорядочили и стандартизовали поведение конвееров,
а то у `find xxx | grep yyy`
$? даёт результат поиска в последнем каталоге, то есть может 1, может 0.

Мощь оболочек unix - конвееры - надо ИХ идеалогически развивать.

anonymous
()
Ответ на: комментарий от anonymous

оЧепятка : вместо `find xxx | grep yyy`, читать `find xxx | xargs grep yyy`

anonymous
()
Ответ на: комментарий от ngrechukh

> вот задачка требующая двухмерности: список mp3 и список текстовых файлов с тэгами. нужно: read A из одного источника и _одновременно_ read B из второго

> красиво не получится, бо трубы одномерные.

man paste ?

monk ★★★★★
()
Ответ на: комментарий от vm

>ок. а например такие вот:
>$$avi=ls -1 *.avi
>$$srt=ls -1 *.srt
>avisrt = ['mplayer "'+ x +'" -sub "'+y+'"' for x in avi for y in srt]

>или так:
>avisrt=map(dododo , avi, srt)
>shell(avisrt[NUMBER_OF_VIDEO] + ' -subfps 24')

Примерно так?
avi=(*.avi) ; srt=(*.srt); i=0
while [ x${Q[$i]} != "x" ] ; do
echo whatever ${avi[$i]} ${srt[$i]}
i=$(($i+1))
done

;)

anonymous
()
Ответ на: комментарий от anonymous

в предыдущем опечатка while [ x${Q[$i]} != "x" ] ; do длжно быть конечно-же while [ x${avi[$i]} != "x" ] ; do

anonymous
()

Ей бо материться хочется... Я понимаю конечно что баш это круто... Я понимаю что всякие мега шелы тоже круто, но зачем же превращять рабочимй инструмент в игрушку/пазл/конструктор/гребу_чо_исчо ... Да скрипеть на bash удобно и красиво... скрипеть на sh немногим менее удобно всего лишь (меньше фичей тож)... я даже незнаю что такое нужно писать постоянно (ибо шелл это просто рабочий инструмент)... IMHO для чего то более чем простенький скрип нужно использовать уже perl/C/C++/python/FreePascal ... ибо чего чего а компиляторов/интерпретаторов в Линукс всегда хватало... мдя...

Jetty ★★★★★
()
Ответ на: комментарий от vm

тьфу ты. а еще юниксоиды. такие штучки curl без всяких шелов делать умеет. а если приспичит то и на awk можно факториалы считать. зачем еще учить какой то неудобный попсовый язык с обязательными отступами

anonymous
()
Ответ на: комментарий от ngrechukh

Нарушишь унихвэй, вставляя в одну софтину функциональность, присутствующую в другой, когда это не требуется из соображений производительности. На хрена шеллу знать про регэкспы, к примеру, если есть grep и awk?

vlugovsky
()
Ответ на: комментарий от anonymous

а ты почитай man find на предмет -iregexp и удивись. кроме того зачем совместимость с мертвым чпуксом? или solaris, aix? я на линухе и фре ставлю баш. баш - это нынче стандарт дефакто.

anonymous
()
Ответ на: комментарий от anonymous

> а ты почитай man find на предмет -iregexp и удивись. кроме того зачем совместимость с мертвым чпуксом? или solaris, aix? я на линухе и фре ставлю баш. баш - это нынче стандарт дефакто.

а на десктопе стандарт де-факто это винда. и что - теперь все программы писать только под нее?

anonymous
()

Ещё bash вот так умеет :) $ cat < /dev/tcp/weather.tomsk.net/7777 температура 17.7 гр, давление 749.3 мм рт/с, ветер сев-вос 2 м/сек

x11term
()
Ответ на: комментарий от x11term

IPython - самодостаточный инструмент с полной функциональностью питона.
Баш годен лишь для самых примитивных задач, более сложные пассажи превращаются в головную боль.

vm ★★
()
Ответ на: комментарий от vm

тебе же сказали. шелл это шелл. напяливать на него навороты - нарушение unix-way. а более сложные пассажи пишутся на перле, сях и фортране.

anonymous
()
Ответ на: комментарий от vm

развитие - это замечательно, выбор - тоже неплохо, примерчики занятные, все это в личных и админских задачках сделает жизнь приятнее, но серьезные переносимые вещи imo как делались, так и будут делаться на sh, реализуя необходимую функциональность на sed/awk/perl/python/ruby .. вполне в духе юниксвея

NiKel
()
Ответ на: комментарий от ngrechukh

> вот задачка требующая двухмерности: список mp3 и список текстовых файлов с тэгами. нужно: read A из одного источника и _одновременно_ read B из второго

> красиво не получится, бо трубы одномерные.

стало быть надо создать два (три...сколько угодно) пайпа. Видимо фильтр умеет читать из двух источников сразу, например из stdin и из некого файла одновременно или из двух разных файлов?

mkfifo mypipe && cat src1 > mypipe & cat src2 | filter mypipe

или

mkfifo mypipe && cat src1 > mypipe & mkfifo mypipe2 && cat src2 > mypipe2 & filter mypipe mypipe2

читаем в обоих случаях из пайпов, в первом только один из них named pipe, во втором оба. В обоих случаях временных файлов нет и диск в передаче данных не участвует

anonymous
()
Ответ на: комментарий от anonymous

опс, не отформатировал в пред посте...

> вот задачка требующая двухмерности: список mp3 и список текстовых файлов с тэгами. нужно: read A из одного источника и _одновременно_ read B из второго

> красиво не получится, бо трубы одномерные.

стало быть надо создать два (три...сколько угодно) пайпа. Видимо фильтр умеет читать из двух источников сразу, например из stdin и из некого файла одновременно или из двух разных файлов?

mkfifo mypipe && cat src1 > mypipe &
cat src2 | filter mypipe

или

mkfifo mypipe && cat src1 > mypipe &
mkfifo mypipe2 && cat src2 > mypipe2 &
filter mypipe mypipe2

читаем в обоих случаях из пайпов, в первом только один из них named pipe, во втором оба. В обоих случаях временных файлов нет и диск в передаче данных не участвует

anonymous
()
Ответ на: комментарий от anonymous

странно, а у меня с wget прокатило... к чему бы это?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.