Pull to refresh

Comments 64

Советую всё же воспользоваться zkbd, что бы не мучаться при переходе на другие терминалы.
# part of .zshrc
autoload zkbd
[[ ! -d ~/.zkbd ]] && mkdir ~/.zkbd
[[ ! -f ~/.zkbd/$TERM-$VENDOR-$OSTYPE ]] && zkbd
source  ~/.zkbd/$TERM-$VENDOR-$OSTYPE
#setup key accordingly
[[ -n "${key[Home]}"    ]]  && bindkey  "${key[Home]}"    beginning-of-line
[[ -n "${key[End]}"     ]]  && bindkey  "${key[End]}"     end-of-line
[[ -n "${key[Insert]}"  ]]  && bindkey  "${key[Insert]}"  overwrite-mode
[[ -n "${key[Delete]}"  ]]  && bindkey  "${key[Delete]}"  delete-char
[[ -n "${key[Up]}"      ]]  && bindkey  "${key[Up]}"      up-line-or-history
[[ -n "${key[Down]}"    ]]  && bindkey  "${key[Down]}"    down-line-or-history
[[ -n "${key[Left]}"    ]]  && bindkey  "${key[Left]}"    backward-char
[[ -n "${key[Right]}"   ]]  && bindkey  "${key[Right]}"   forward-char
Вот это удобно! В Zsh столько всего — не уследишь… :)
Только почему то не работает это у меня:

zkbd: must be run as a function or shell script, not sourced

% zsh --version
zsh 4.3.5 (i686-pc-linux-gnu)</.code>
путь к функции укажи
у мну сделано проще, в начале поставлено
alias zkbd='zsh /usr/share/zsh/4.3.5/functions/Misc/zkbd'
Спасибо за вводную статью. Переходить уж точно не хочется — zsh очень могуч!

Для того, чтобы велась история комманд (например последние 100 штук) нужно добавить в .zshrc:

SAVEHIST=100
HISTFILE=~/.zsh_history


Для того чтобы настроить правильное поведение нажатия клавиш Home, End итп (а оно скорее всего понадобится, так как zsh не читает /etc/inputrc, в отличие от bash), воспользуйтесь сочетанием клавиш Ctrl-v Home в терминале. Символ, который отобразится после этого можно использовать для задания поведения.

bindkey "^[[7~" beginning-of-line

Поведение клавиш может отличаться в зависимости от используемого терминала (я пользую rxvt-unicode).

>>находим строчку с вашим логином в /etc/passwd и меняем /bin/bash на /bin/zsh
$chsh [user] изящнее будет, да и рут не нужен тогда =)
тоже глаза резало, когда читал :)
а usermod и pw отменили?
UFO just landed and posted this here
и кроме линукса тоже ничего нет, да? или типа сабж можно использовать только в линуксе?
Ну это типа блог «Linux для всех»
А мне нравится csh
тем что можно недонабрать команду до конца, затем нажать стрелку вверх и будет поиск по хистори начинающийся с этих символов.

Что я делаю не так?
ну поиск по хистори стрелочками по первым буквы комманды умеет не только zsh и csh, но и к примеру tcsh :) а вот райтпромпт ничего кроме zsh не умеет, по табу казать список доступных опций для продолжения команды и потом их выбирать стрелочками на клавиатуре тоже никто кроме zsh не умеет. ну есть еще много чего чем zsh рулит.

не могу поверить своим глазам, неужто кто-то из линуксятнегов смог выкинуть свой баш и посмотреть на что-то другое? ну что ж, автор молодец, смог не только поставить zsh, но и прочитать немного про него :)
Вроде бы есть какой-то пакет скриптов к tcsh где в зависимости от команды нужное дописывается, вроде как во Frenzy 0.3 стоят (давно не видел его)
не могу поверить своим глазам, неужто кто-то из линуксятнегов смог выкинуть свой баш и посмотреть на что-то другое?

Что ж у фряшников такие проблемы с самооценкой, что надо непременно других опускать, чтоб свою значимость почувствовать…
не видел ни одного линупсойда, который бы не кричал что линупс рулез, а баш лучший шелл. автор топика ломает шаблоны :)

пс: я не говорил что я «фряшник», но точно могу сказать что не «линупсойд» :)
То есть аватар Вы себе поставил исключительно потому, что картинка понравилась?
картинка и в самом деле очень ничего. не люблю я пингвинов, пускай их черти в аду дрючат :D кого то волнует что там на картинке? вот у вас человечек махает ручкой.

пс: с мифологической природой Beasty с лого BSD и его непричастности к силам зла я знаком. :)
UFO just landed and posted this here
попробуй в ~/.zshrc всунуть следующее:

bindkey "^[[A" history-beginning-search-backward
bindkey "^[[B" history-beginning-search-forward
UFO just landed and posted this here
Ну, так и bash умеет.
А zsh, пожалуй, сегодня попробую.
UFO just landed and posted this here
UFO just landed and posted this here
сколько не видел админов — если пользуются zsh на одном компе, то совсем нет причин не пользоваться bash на другом.

zsh даёт _настолько_ много, что отказываться от него — идиотизм.
Если не использовать сильно специфичные вещи для одного шелла, то особой разницы нету.
На всех полноценных шеллах (/bin/sh не в счет :) есть автодополнение, имена команд от шелла не зависят.
Проблемы «знать» bash имхо нет, если пользуешься zsh.
А наете почему никто не хочет переходить с баша? потому что это дефолтный пакет на всех серверах. Сделали это так что бы админу не приходилось знать по 50 шелов… а было достаточно одного. Дома канеш можно ставить что угодно, но когда работаешь в калективе с хреновой тучей серверов, то только баш.

Это Вы просто так сказали или можете обосновать?
UFO just landed and posted this here
Шелл — не язык программирования. Стандартные операции и возможности, которые есть в sh, есть во всех других шеллах (кроме разве что крошечных вроде бизибоксовых). Соответственно, если знать sh, не составит проблемы работать с любым другим шеллом.
Более того, преимущества того же zsh над башем проявляются именно во взаимодействии с пользователем. На серверах нет никакого взаимодействия. На серверах есть скрипты, в которых от шелла опять же требуются возможности на уровне sh. Для остального есть стандартные утилиты — awk, grep, find, xargs. Если чего-то нельзя сделать с таким инструментарием — значит, это нужно делать с применением более тяжеловесных языков: перла, питона. Использовать для этого нестандартные расширения того же баша — ненадежно и неправильно в принципе.
UFO just landed and posted this here
Погодите… не стоит за меня расписыватся… я не гоорил что Шелл — это язык программинга

А я и не утверждал, что Вы такое говорили. Вы сравнили работу админов с разными шеллами с работой программистов с разными языками. Я указал на то, что сравнение некорректно, поскольку разница между шеллами на уровне написания скриптов значительно меньше, нежели между языками программирования. Поэтому
Сделали это так что бы админу не приходилось знать по 50 шелов… а было достаточно одного. Дома канеш можно ставить что угодно, но когда работаешь в калективе с хреновой тучей серверов, то только баш.

не соответствует истине. Для администрирования от шелла не требуется ничего сверх того, что умеют почти все шеллы. Тут уж никакой разницы — баш или что-то другое. Если админ для скриптов вместо стандартных системных утилит использует плюшки конкретного шелла — это плохой админ.
UFO just landed and posted this here
Тоесть вы только что сказали, что если я использую в шеле те функции которых нет в стандартном — то я плохой админ

Не подменяйте понятия. Я сказал конкретно о скриптах, которые ДОЛЖНЫ работать во всех sh-совместимых шеллах. Для написания скриптов не нужно продвинутое автодополнение, история команд и прочие прелести zsh.
Но если я их не использую, то зачем мне ставить другой шел взамен стандартного

Чтобы использовать указанные выше автодополнение, историю команд и прочие прелести. Для работы _пользователя_ с шеллом использовать, а не для выполнения шеллом скриптов! Если я пишу скрипты с #!/bin/sh, то я знаю, что эти скрипты будут работать всегда и везде. А для повседневной работы буду пользоваться тем шеллом, который мне больше нравится, или даже менять шеллы по десять раз в день — от этого ничего не изменится и не сломается.
UFO just landed and posted this here
Согласен. Дефолт — это sh. А любой шелл может работать в режиме sh. Поэтому особого смысла держать везде bash тоже нет :)
UFO just landed and posted this here
У баша нестандартных фич тоже достаточно. А зеленых админов за что-то, отличное от #!/bin/sh, надо бить по рукам, пока не сменят цвет :)
UFO just landed and posted this here
Про «все серверы» сказано громко и не совсем верно, но в подавляющем числе *никсов — определенно да. Даже Макось и OpenSolaris на него перебрались.
Вот _минимум_ =)

# AutoCD
setopt autocd

# Set xterm title
case $TERM in (xterm*|rxvt)
    precmd () { print -Pn "\e]0;%n@%m: %~\a" }
    preexec () { print -Pn "\e]0;%n@%m: $1\a" }
    ;;
esac

# Extended opts
setopt extendedglob
setopt extended_glob

# Expands {abc}file to afile bfile cfile, etc.
setopt brace_ccl

# Searches =name in PATH
setopt equals

# Dont require a leading dot for matching "hidden" files
setopt glob_dots

# Enable multiple redirections
setopt multios

# Report status of bg jobs immediately
setopt notify

# Report status of bg jobs if exiting
setopt check_jobs

# Suffix aliases
alias -s py='env python'
alias -s php='env php'
Да, zsh на самом мощнейшая вещь. Чего он только не умеет. Там даже тетрис встроенный есть. Включается следующим образом:

autoload -U tetris
zle -N tetris
bindkey КЛАВИША tetris
Прописал zsh вместо bash в окошечном terminal под гномом. Выяснилось, что оно не подменяет заголовок текущим каталогом. Как сделать, чтобы подменяло?
блин, увидел ответ на два поста выше =)

case $TERM in (xterm*|rxvt)
precmd () { print -Pn "\e]0;%n@%m: %~\a" }
preexec () { print -Pn "\e]0;%n@%m: $1\a" }
;;
esac
имхо zsh удобнее bash'a, но поддерживает ли он unicode utf8? когда года два назад я им пользовался, ещё не было поддержки в официальном релизе, а как щас? поддерживает ли его в автодополнении?
zsh 4.3.6 (x86_64-pc-linux-gnu)

max ~ % cd русс [tab]
русс/ русск/ русский/
в КОИ тоже так можно делать :)

в 2005 был задан вопрос (релиз 3. х. х какой-то):
Q: Why doesn't zsh have proper UTF-8 support?

A: The code has not been written yet.

Q: What makes UTF-8 support difficult to implement?

A: In order to handle arbitrary encodings the correct way, significant and intrusive changes must be made to the shell


в ньюсах про UTF-8 тоже мало хорошего:
Release 4.3.1
This is the first release of the 4.3 series, which contains initial support for multibyte characters in the shell's line editor (in particular UTF-8, although any character set supported by the system library is usable)


на счёт того, поддерживается ли сейчас unicode UTF-8 полностью я не нашёл записей.
max ~ % locale
LANG=en_US.UTF-8
LC_CTYPE=«en_US.UTF-8»
LC_NUMERIC=«en_US.UTF-8»
LC_TIME=«en_US.UTF-8»
LC_COLLATE=«en_US.UTF-8»
LC_MONETARY=«en_US.UTF-8»
LC_MESSAGES=«en_US.UTF-8»
LC_PAPER=«en_US.UTF-8»
LC_NAME=«en_US.UTF-8»
LC_ADDRESS=«en_US.UTF-8»
LC_TELEPHONE=«en_US.UTF-8»
LC_MEASUREMENT=«en_US.UTF-8»
LC_IDENTIFICATION=«en_US.UTF-8»
LC_ALL=

я что-то не понимаю?
это локали машинки вашей, а найти бы где-то хоть строчку в release_notes что zsh поддерживает юникод целиком.
да, спасибо, я знаю, что это =)

«zsh поддерживает юникод целиком» — лично меня и так устраивает, с русскими буквами нормально работает. вам нужно что-то конкретно? или просто хотите, чтобы всё было на utf-8?
мне нужна поддержка именно полная для работы :( дома мог бы и такую версию поставить, но на удалённые серваки увы, только полностью уникодовый шел можно.
что то на экране одни иероглифы) это точно тот сайт?
что то на экране одни иероглифы) это точно тот сайт?
гугл подсказывает, что все таки: fishshell.com/
пользуюсь zsh уже второй год, можете тут взять мой конфиг, красив и функционален.
спасибо большое кстати за конфиг, пользуюсь, немного допилил добавкой поддержки home, end, delete и прочими вкусностями, но за основу именно ваш взят :)
поправил ссылку) за 4 года что-то в конфиге уже поменялось
да говняшка этот zsh. Большая часть его «фич» — не нужные никому перделки, которые к тому же надо агрессивно забатывать. Зато при настройке этого отстоя начинают выползать проблемы как раз связанные с неполной поддержкой UTF-8.
// fish определённо лучше. И настроен хорошо сразу из коробки, в отличии от этого красноглазого говна. Впрочем, бздуны это оценят, у них и склад ума такой, что охота поебаться и всё равно, приходится использовать koi8-r, т.к. сама система говняно работает с utf-8 :D
Sign up to leave a comment.

Articles