DotFiles/Shells/Zsh/mc alias

Материал из ALT Linux Wiki

(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «Категория: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
-
создается алиас mc='. /usr/share/mc/bin/mc-wrapper.sh'
+
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
>Не работает под обычными пользователями
>Не работает под обычными пользователями
-
АС> Собственно чтение bashrc, насколько я понял, выполняется для
 
-
АС> какой-то совместимости.
 
По смыслу правильно было бы разделить 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://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
 
* 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

Версия 17:20, 23 октября 2016


Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


Проблема: в 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.


В ПРОЦЕССЕ НАПИСАНИЯ

в /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



Ссылки


 
Личные инструменты