преимущества zsh перед bash

yroslavasako

Какие есть реальные преимущества у zsh как с точки зрения интерактивной консоли, так и скриптового языка? Не в духе неосиляторства, а реальные киллер фичи.

AlexV769

Писать скрипты что на bash, что на zsh одинаково плохо, поэтому с т.з. скриптового языка они одинаковы.

yroslavasako

Писать скрипты что на bash, что на zsh одинаково плохо,
но удобнее чем на питоне

YUAL

Весьма холиварное утверждение. Что-то удобнее на баше, что-то на питоне. Что-то ваще на перле.

yroslavasako

Что-то удобнее на баше, что-то на питоне.
я имел в виду как раз тот тип скриптов, которые удобнее писать на баше, чем на питоне. Скрипты для сопряжения запуска многих самостоятельных утилит. Понятно, что скрипты для генерации веб-страниц удобнее писать на питоне. Но поскольку сравнивается баш и zsh, я думал, будет очевидно какая именно область скриптописательства меня интересует.

BondarAndrey

Попробуй Scheme shell (scsh): написание скриптов в функциональном, ООП и процедурном стилях. Это позволит тебе, наконец, убить избыток свободного времени и почувствовать себя совсем не таким как все. Ты только посмотри, насколько круче смотрится вместо
 gunzip < paper.tex.gz | detex | spell | lpr -Ppulp &

писать

(& (| (gunzip) (detex) (spell) (lpr -Ppulp))
(< paper.tex.gz))

yroslavasako

Попробуй Scheme shell (scsh):
забавно. Нечто среднее между питоном и башом по шкале удобства. Зато доступ к сисколам.

AlexV769

но удобнее чем на питоне
Да также, вообще говоря.
Если хочешь писать скрипты на shell - пиши скрипты, которые умеет понимать /bin/sh. Все эти башизмы и zшизмы (последних, впрочем, не наблюдал) - плохо, как только этот код должен исполнять кто-то другой (не дай б-г ещё и на другой операционной системе).

Marinavo_0507

ну если надо исполнить скрипт на какой-то древней и мёртвой системе, то там скорее всего не только bash будет отсутствовать, но что-то ещё нужное

yroslavasako

а zh сводится к sh? Тогда всё просто ок, я привык пользоваться исключительно sh подмножеством баша

yroslavasako

оно и на живой не всегда работает. Отдельные личности любят ставить шебанг /bin/sh, а в самом файле писать скрипт на баше. А ведь далеко не везде /bin/sh подменён башем, в некоторых системах он оригинальный

AlexV769

Т.е. ты хочешь сказать, что наличие bash в OS - это уже обязательное требование, чтобы OS считали живой?

Marinavo_0507

если живая - то можно поставить bash
даже на винду можно

AlexV769

zsh себя ведет немного иначе, чем sh. Например, переменные из сабшела вытаскивает в global context. Но так да, они эквивалентны. Впрочем, как и с bash в этом смысле.

AlexV769

Проблема, как уже заметил Айвенго, в том, что не всегда понятно, что скрипту (хорошо, усложняем - некому набору исходников) для корректной работы/установки нужен именно bash.

Marinavo_0507

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

apl13

ХОТЕТ.

dgaf

ipython -p pysh
ещё веселее
http://ipython.org/ipython-doc/dev/interactive/shell.html

Serab

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

dangerr

комплишен там прикольный, мне нравится
Я извиняюсь за невежество... с zsh имел дело только в system rescue cd, где он запускается по-дефолту. Так вот там был как раз самый ужасный вид комплетишна, который только существует. "Жми на TAB до посинения", я бы его назвал. Такой же комплетишн к моему глубочайшему сожалению используется в оконном менеджере ion. Может я его просто не умею готовить? Или ты какой-то другой имеешь в виду?
Для уточнения, я объясню что я имею в виду. К примеру имеются такие команды:
abcdef
abcghk
abclmn
и так далее до abcxyz
Если я хочу вызвать последнюю из них, то случае bash я набираю a<tab>x<tab>. А в случае этого типа доплений, я нажимаю a<tab><tab><tab><tab><tab><tab><tab>. В итоге проще команду набрать полностью руками, чем в случае неудачного нажатия на <tab>, мучиться.

AlexV769

у меня настроено так, что на a<tab> вылезает список возможных команд, начинающихся с a.

Serab

да, поднастроить надо, у меня от баша последовательносью нажатий отличаться не будет, но вот зато табом можно нормально по ним колесть (т.е. использоваться оба метода).

dangerr

ну так когда начинаешь колесить, то в строке уже полное имя на данный момент выбранной команды. И если уже начал, то уже просто продолжить ввод не получится.

dangerr

то есть если команд, начинающихся с а, но не продолжающихся bc, как в моём примере нет, то у тебя всё равно не дополнится?

apl13

Если я хочу вызвать последнюю из них, то случае bash я набираю a<tab>x<tab>. А в случае этого типа доплений, я нажимаю a<tab><tab><tab><tab><tab><tab><tab>. В итоге проще команду набрать полностью руками, чем в случае неудачного нажатия на <tab>, мучиться.
Лол, модель из виндовой "консоли".

apl13

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

AlexV769

что значит команд? В твоих примерах все эти abc* - это исполняемые файлы, находимые в path и история введнных пользователем команд тут не при чем.
Дабы далее не возникало подобных вопросов, вот скриншоты
[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

dangerr

что значит команд? В твоих примерах все эти abc* - это исполняемые файлы, находимые в path и история введнных пользователем команд тут не при чем.
Да, именно так. Но термин "команды", мне кажется более общим, так как они могут быть не только исполнимыми файлами, но и, напимер, встроены в оболочку.
Дабы далее не возникало подобных вопросов, вот скриншоты
Ну вообще то же самое, что в дефолтном bash и есть, кроме того, что для получения предпоседней секции кода из твоего поста, нажать таб в дефолтном bash надо два раза, а не один.
Что у тебя будет по второму нажатию на tab?
boot дополнится до boot0cfg, по третьему до bootparamd и тд? Или просто ещё раз то же самое выдастся?

AlexV769

Что у тебя будет по второму нажатию на tab?boot дополнится до boot0cfg, по третьему до bootparamd и тд? Или просто ещё раз то же самое выдастся?
Дополнится до первого (второго, третьего и т.д.) варианта, саджест останется.

dangerr

Дополнится до первого (второго, третьего и т.д.) варианта, саджест останется.
Во, вот это мне и не нравится. Один лишний раз нажал на таб и нужно либо жать дальше, пока не дошёл до нужного варианта, либо бекспейсом возвращаться в исходное состояние. А меня дефолтный баш к тому же приучил жать таб дважды, чтобы увидеть комплетишн.
А вообще выложи, pls, свой конфиг - поиграться было бы интресно.

AlexV769


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.
Оставить комментарий
Имя или ник:
Комментарий: