преимущества zsh перед bash
Писать скрипты что на bash, что на zsh одинаково плохо, поэтому с т.з. скриптового языка они одинаковы.
Писать скрипты что на bash, что на zsh одинаково плохо,но удобнее чем на питоне
Весьма холиварное утверждение. Что-то удобнее на баше, что-то на питоне. Что-то ваще на перле.
Что-то удобнее на баше, что-то на питоне.я имел в виду как раз тот тип скриптов, которые удобнее писать на баше, чем на питоне. Скрипты для сопряжения запуска многих самостоятельных утилит. Понятно, что скрипты для генерации веб-страниц удобнее писать на питоне. Но поскольку сравнивается баш и zsh, я думал, будет очевидно какая именно область скриптописательства меня интересует.
scsh): написание скриптов в функциональном, ООП и процедурном стилях. Это позволит тебе, наконец, убить избыток свободного времени и почувствовать себя совсем не таким как все. Ты только посмотри, насколько круче смотрится вместо
писать
Попробуй Scheme shell (gunzip < paper.tex.gz | detex | spell | lpr -Ppulp &
писать
(& (| (gunzip) (detex) (spell) (lpr -Ppulp))
(< paper.tex.gz))
Попробуй Scheme shell (scsh):забавно. Нечто среднее между питоном и башом по шкале удобства. Зато доступ к сисколам.
но удобнее чем на питонеДа также, вообще говоря.
Если хочешь писать скрипты на shell - пиши скрипты, которые умеет понимать /bin/sh. Все эти башизмы и zшизмы (последних, впрочем, не наблюдал) - плохо, как только этот код должен исполнять кто-то другой (не дай б-г ещё и на другой операционной системе).
ну если надо исполнить скрипт на какой-то древней и мёртвой системе, то там скорее всего не только bash будет отсутствовать, но что-то ещё нужное
а zh сводится к sh? Тогда всё просто ок, я привык пользоваться исключительно sh подмножеством баша
оно и на живой не всегда работает. Отдельные личности любят ставить шебанг /bin/sh, а в самом файле писать скрипт на баше. А ведь далеко не везде /bin/sh подменён башем, в некоторых системах он оригинальный
Т.е. ты хочешь сказать, что наличие bash в OS - это уже обязательное требование, чтобы OS считали живой?
даже на винду можно
zsh себя ведет немного иначе, чем sh. Например, переменные из сабшела вытаскивает в global context. Но так да, они эквивалентны. Впрочем, как и с bash в этом смысле.
Проблема, как уже заметил Айвенго, в том, что не всегда понятно, что скрипту (хорошо, усложняем - некому набору исходников) для корректной работы/установки нужен именно bash.
то есть если в скрипте не написано, что он работает на разных системах, его скорее всего нужно будет поправить
ХОТЕТ.
ipython -p pysh
для кого-то киллер-фичей будет правильное управление хистори при нескольких открытых шеллах одновременно.
комплишен там прикольный, мне нравитсяЯ извиняюсь за невежество... с zsh имел дело только в system rescue cd, где он запускается по-дефолту. Так вот там был как раз самый ужасный вид комплетишна, который только существует. "Жми на TAB до посинения", я бы его назвал. Такой же комплетишн к моему глубочайшему сожалению используется в оконном менеджере ion. Может я его просто не умею готовить? Или ты какой-то другой имеешь в виду?
Для уточнения, я объясню что я имею в виду. К примеру имеются такие команды:
abcdef
abcghk
abclmn
и так далее до abcxyz
Если я хочу вызвать последнюю из них, то случае bash я набираю a<tab>x<tab>. А в случае этого типа доплений, я нажимаю a<tab><tab><tab><tab><tab><tab><tab>. В итоге проще команду набрать полностью руками, чем в случае неудачного нажатия на <tab>, мучиться.
у меня настроено так, что на a<tab> вылезает список возможных команд, начинающихся с a.
да, поднастроить надо, у меня от баша последовательносью нажатий отличаться не будет, но вот зато табом можно нормально по ним колесть (т.е. использоваться оба метода).
ну так когда начинаешь колесить, то в строке уже полное имя на данный момент выбранной команды. И если уже начал, то уже просто продолжить ввод не получится.
то есть если команд, начинающихся с а, но не продолжающихся bc, как в моём примере нет, то у тебя всё равно не дополнится?
Если я хочу вызвать последнюю из них, то случае bash я набираю a<tab>x<tab>. А в случае этого типа доплений, я нажимаю a<tab><tab><tab><tab><tab><tab><tab>. В итоге проще команду набрать полностью руками, чем в случае неудачного нажатия на <tab>, мучиться.Лол, модель из виндовой "консоли".
ну так когда начинаешь колесить, то в строке уже полное имя на данный момент выбранной команды. И если уже начал, то уже просто продолжить ввод не получится.Надо сделать порог: перебор вариантов после четырех нажатий таба, хи-хи.
Дабы далее не возникало подобных вопросов, вот скриншоты
[9:52:06]nas.home:
~>b
b64decode berkeley_db_svc-4.2 bootptest bsnmpwalk builtin
b64encode bg brandelf bspatch bunzip2
badblocks biff break bt3cfw burncd
badsect bindkey bsdcpio btcli byacc
banner biosdecode bsdgrep bthidcontrol bye
basename bison bsdiff bthidd bzcat
bash bjam bsdinstall bthost bzegrep
bashbug blkid bsdlabel btinfo bzfgrep
batch bmp2tiff bsdtar btpand bzgrep
bc boot0cfg bsnmpd btpd bzip2
bcmfw bootparamd bsnmpget btsockstat bzip2recover
bdes bootpef bsnmpset btxld bzless
нажимаю 'o', TAB
[9:52:06]nas.home:
~>boot
нажимаю TAB
~>boot
boot0cfg bootparamd bootpef bootptest
если вместо последнего TAB нажать '0', TAB, то получится
[9:52:06]nas.home:
~>boot0cfg
что значит команд? В твоих примерах все эти abc* - это исполняемые файлы, находимые в path и история введнных пользователем команд тут не при чем.Да, именно так. Но термин "команды", мне кажется более общим, так как они могут быть не только исполнимыми файлами, но и, напимер, встроены в оболочку.
Дабы далее не возникало подобных вопросов, вот скриншотыНу вообще то же самое, что в дефолтном bash и есть, кроме того, что для получения предпоседней секции кода из твоего поста, нажать таб в дефолтном bash надо два раза, а не один.
Что у тебя будет по второму нажатию на tab?
boot дополнится до boot0cfg, по третьему до bootparamd и тд? Или просто ещё раз то же самое выдастся?
Что у тебя будет по второму нажатию на tab?boot дополнится до boot0cfg, по третьему до bootparamd и тд? Или просто ещё раз то же самое выдастся?Дополнится до первого (второго, третьего и т.д.) варианта, саджест останется.
Дополнится до первого (второго, третьего и т.д.) варианта, саджест останется.Во, вот это мне и не нравится. Один лишний раз нажал на таб и нужно либо жать дальше, пока не дошёл до нужного варианта, либо бекспейсом возвращаться в исходное состояние. А меня дефолтный баш к тому же приучил жать таб дважды, чтобы увидеть комплетишн.
А вообще выложи, pls, свой конфиг - поиграться было бы интресно.
ZDOTDIR=~/.zsh
zstyle :compinstall filename $ZDOTDIR/zshrc
autoload -U compinit
compinit -d $ZDOTDIR/.zcompdump
bindkey -e
export LISTMAX=200
export HISTSIZE=2000
export SAVEHIST=2000
export TMPPREFIX=$ZDOTDIR/tmp
export HISTFILE=$ZDOTDIR/zsh_history
setopt AlwaysLastPrompt # try to return to the last prompt if given no numeric argument.
setopt AppendHistory # zsh sessions will append their history list to the history file, rather than overwrite it.
setopt AutoMenu # Automatically use menu completion after the second consecutive request for completion.
setopt Beep # Beep on error in ZLE.
setopt NoHup # NO send the HUP signal to running jobs when the shell exits.
setopt Equals # Perform = filename expansion.
setopt ExtendedHistory # Save each command's beginning timestamp
setopt FunctionArgzero # When executing a shell function or sourcing a script, set $0 temporarily to the name of the function/script.
setopt HistBeep # Beep when an attempt is made to access a history entry which isn't there.
setopt HistIgnoreDups # Do not enter command lines into the history list if they are duplicates of the previous event.
setopt HistIgnoreSpace # Remove command lines from the history list when the first character on the line is a space.
setopt LongListJobs # List jobs in the long format by default.
setopt ListTypes # When listing files that are possible completions, show the type of each file with a trailing identifying mark.
setopt MailWarning # Print a warning message if a mail file has been accessed since the shell last checked.
setopt MultIOs # Perform implicit tees or cats when multiple redirections are attempted
setopt PrintEightBit # Print eight bit characters literally in completion lists
setopt RmStarSilent # Do not query the user before executing `rm *' or `rm path/*'.
setopt ShortLoops # Allow the short forms of for, select, if, and function constructs.
Оставить комментарий
yroslavasako
Какие есть реальные преимущества у zsh как с точки зрения интерактивной консоли, так и скриптового языка? Не в духе неосиляторства, а реальные киллер фичи.