DotFiles/Shells/Zsh/mc alias: различия между версиями
(Новая страница: «Категория:DotFiles В ПРОЦЕССЕ НАПИСАНИЯ {{Stub}} >Если вызвать просто скрипт, то почему-то ниче...») |
Нет описания правки |
||
Строка 1: | Строка 1: | ||
[[Категория:DotFiles]] | [[Категория:DotFiles]] | ||
{{Stub}} | {{Stub}} | ||
> | Проблема: в p6,p7,p8 в zsh 'из коробки' отсутствует поддержка mc | ||
(смена текущей директории на посещенную в mc, {{cmd|alias mc='. /usr/lib/mc/mc-wrapper.sh'}}) и другие alias'ы, имеющиеся в bash. | |||
текущий хак - вписать в .zshrc | |||
alias mc >/dev/null || . /etc/zprofile | |||
в чем суть проблемы? Поддержка mc реализована через alias. | |||
alias'ы не передаются от родительского shell к shell потомку, | |||
поэтому их нужно объявлять каждый раз при запуске shell. | |||
Кроме того, alias mc жестко зависит от текущей сборки mc. | |||
у нас в текущем сизифе это | |||
alias mc='. /usr/lib/mc/mc-wrapper.sh | |||
но в debian? это | |||
alias mc='. /usr/share/mc/bin/mc-wrapper.sh' | |||
Чтобы каждый пользователь не прописывал эти алиасы у | |||
себя локально в .zshrc для zsh или .bashrc | |||
и не правил их при изменениях в пакетах, | |||
Нужно общесистемное место, куда пакеты могут складывать | |||
свои shell alias. | |||
Традиционно в роли такого места выступал {{path|/etc/bashrc.d/}}. | |||
{{path|/etc/bashrc}} загружал {{path|/etc/bashrc.d/*.sh}} | |||
а другие shells (в т.ч. zsh) для совместимости загружали {{path|/etc/bashrc}}. | |||
* https://bugzilla.altlinux.org/show_bug.cgi?id=25703 | |||
* https://bugzilla.altlinux.org/show_bug.cgi?id=14641 | |||
* https://bugzilla.altlinux.org/show_bug.cgi?id=22859 | |||
В ПРОЦЕССЕ НАПИСАНИЯ | |||
в /etc/profile примерно такой код: | в /etc/profile примерно такой код: | ||
for i in /etc/profile.d/*.sh; do | for i in /etc/profile.d/*.sh; do | ||
. $i # | . $i # загрузка скрипта в контексте текущего процесса | ||
done | done | ||
>Не работает под обычными пользователями | >Не работает под обычными пользователями | ||
По смыслу правильно было бы разделить sh- и bash-specific того, что | По смыслу правильно было бы разделить sh- и bash-specific того, что | ||
Строка 38: | Строка 62: | ||
== Ссылки == | == Ссылки == | ||
* [http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/etc.html /etc/profile.d in Linux Standard Base Core Specification] | * [http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/etc.html /etc/profile.d in Linux Standard Base Core Specification] | ||
* https://lists.altlinux.org/pipermail/sisyphus/2008-March/329166.html | * https://lists.altlinux.org/pipermail/sisyphus/2008-March/329166.html | ||
* https://lists.altlinux.org/pipermail/sisyphus/2008-March/329210.html | * https://lists.altlinux.org/pipermail/sisyphus/2008-March/329210.html |
Версия от 20:20, 23 октября 2016
Проблема: в p6,p7,p8 в zsh 'из коробки' отсутствует поддержка mc
(смена текущей директории на посещенную в mc, {{{1}}}) и другие alias'ы, имеющиеся в bash.
текущий хак - вписать в .zshrc
alias mc >/dev/null || . /etc/zprofile
в чем суть проблемы? Поддержка mc реализована через alias. alias'ы не передаются от родительского shell к shell потомку, поэтому их нужно объявлять каждый раз при запуске shell. Кроме того, alias mc жестко зависит от текущей сборки mc.
у нас в текущем сизифе это alias mc='. /usr/lib/mc/mc-wrapper.sh но в debian? это alias mc='. /usr/share/mc/bin/mc-wrapper.sh'
Чтобы каждый пользователь не прописывал эти алиасы у себя локально в .zshrc для zsh или .bashrc и не правил их при изменениях в пакетах, Нужно общесистемное место, куда пакеты могут складывать свои shell alias.
Традиционно в роли такого места выступал /etc/bashrc.d/. /etc/bashrc загружал /etc/bashrc.d/*.sh а другие shells (в т.ч. zsh) для совместимости загружали /etc/bashrc.
- https://bugzilla.altlinux.org/show_bug.cgi?id=25703
- https://bugzilla.altlinux.org/show_bug.cgi?id=14641
- https://bugzilla.altlinux.org/show_bug.cgi?id=22859
В ПРОЦЕССЕ НАПИСАНИЯ
в /etc/profile примерно такой код:
for i in /etc/profile.d/*.sh; do
. $i # загрузка скрипта в контексте текущего процесса
done
>Не работает под обычными пользователями
По смыслу правильно было бы разделить sh- и bash-specific того, что
сейчас валится в /etc/bashrc.d, дабы bash читал свой /etc/bashrc.d, а
все sh-скрипты - какой-нибудь /etc/shrc.d
/etc/zprofile выполняется для login-шелла, возможно что zsh вызывается из эмулятора терминала, который запускает zsh без флага -l
if $SHLVL == 1 && ! -o LOGIN ; then
source ~/.zprofile
fi
Ссылки
- /etc/profile.d in Linux Standard Base Core Specification
- https://lists.altlinux.org/pipermail/sisyphus/2008-March/329166.html
- https://lists.altlinux.org/pipermail/sisyphus/2008-March/329210.html
- https://lists.altlinux.org/pipermail/sisyphus/2008-March/329181.html
- http://stackoverflow.com/questions/10574684/where-to-place-path-variable-assertions-in-zsh
- http://superuser.com/questions/187639/zsh-not-hitting-profile