Псевдонимы доли и установка PATH между zsh и ударом

Вы могли всегда использовать другую утилиту как awk отформатировать вывод ls1:

/bin/ls -ls | awk '{print $7,$8,$9}'


1. Да, обычно, Вы не должны анализировать вывод ls, но в этом случае вопрос конкретно призывает к нему...

24
13.04.2017, 15:37
4 ответа

Я создал бы файл /etc/commonprofile и источник это в обоих /etc/profile и /etc/zsh/zprofile. Это дает Вам возможность совместно использовать общие настройки и все еще использовать bash соответственно zsh определенные настройки и синтаксис в /etc/profile соответственно zprofile.

16
27.01.2020, 19:41
  • 1
    среди других хороших ответов, я думаю, что этот подходит мне лучшее, относительно простое и "чистое" –  phunehehe 24.10.2010, 15:05
  • 2
    , что Вы подразумеваете "под источником он"? –  Hlung 14.05.2015, 08:14
  • 3
    @Hlung Для загрузки оболочки представляет explicility, здесь 'источник/path/to/.shell_profile' прибывает. См. страницу справочника на 'источнике'. –  Itachi 15.06.2015, 09:26

Zsh имеет sh режим эмуляции, который позволит ему выполнить POSIX sh код и некоторые расширения удара. Пока Вы не используете функции удара, которые не имеет zsh (с тем же синтаксисом), можно было получить тот же файл обе оболочки. Используйте emulate встроенный для помещения zsh в режим эмуляции; с -L опция, эмуляция локальна для функции включения (не, включение получило сценарий).

source_sh () {
  emulate -LR sh
  . "$@"
}

Для вещей как переменные среды можно использовать source_sh /etc/profile в /etc/zprofile и source_sh ~/.profile в ~/.zprofile, так как файлы профиля, вероятно, не используют определенные для удара функции.

Для вещей как псевдонимы и функциональные определения, так как файлы дистанционного управления оболочки, вероятно, будут содержать много вещей, которые не могут быть совместно использованы (подсказка, привязки клавиш, настройки завершения, …), использовать файл как ~/.sh_aliases это получено в ~/.bashrc и source_sh'd в ~/.zshrc.

17
27.01.2020, 19:41
  • 1
    Должен быть способ сказать "автоматически upvote все ответы Gilles". Это сэкономило бы мне некоторое время. Нет действительно, Ваша скала ответов. Всегда точный, правильно написанный и всесторонний. –  fschmitt 24.10.2010, 00:14
  • 2
    @fschmitt: Я соглашаюсь. И Вы видите, что это даже не редактируется! Эта подсказка, обеспеченная здесь, действительно хороша. –  Somebody still uses you MS-DOS 16.12.2010, 22:11

Что относительно простой символьной ссылки?

ln -s /etc/profile /etc/zsh/zprofile

Можно также добавить что-то вроде этого при необходимости в некоторой условной инициализации:

#Determine our shell without using $SHELL, which may lie
shell="sh"
if test -f /proc/mounts; then
   case $(/bin/ls -l /proc/$$/exe) in
        *bash) shell=bash ;;
        *dash) shell=dash ;;
        *ash)  shell=ash ;;
        *ksh)  shell=ksh ;;
        *zsh)  shell=zsh ;;
    esac
fi
4
27.01.2020, 19:41
  • 1
    Хм, но я не думаю, что это будет немного инструментом для очистки, чем определение источника его. Существует ли файл, который считают и zsh и удар? –  phunehehe 23.10.2010, 18:38
  • 2
    , что заставляет Вас думать, что определение источника или создание символьной ссылки не являются "чистым" решением? –  echox 23.10.2010, 22:40
  • 3
    , который я просто означал говорить в случае необходимости, я хотел бы получить файл, а не управлять символьной ссылкой. Я не хочу создавать большую зависимость между файлами. –  phunehehe 24.10.2010, 09:24
  • 4
    более портативная альтернатива /bin/ls -l /proc/$$/exe ps -o comm= -p $$. Это не полностью надежно, потому что некоторые оболочки ведут себя по-другому в зависимости от того, как они были вызваны; на практике просто тестирование $0 в .profile вероятно, будет лучший признак. Но большинство оболочек, которые предлагают полезные функции (удар, ksh, zsh) может быть просто распознано (и их определенная версия, который является большим плюс) путем тестирования некоторых переменных: $BASH, $BASH_VERSION, $BASH_VERSINFO; $KSH_VERSION, ${.sh.version}; $ZSH_VERSION. –  Gilles 'SO- stop being evil' 20.11.2010, 02:10
  • 5
    echox, Ваш оператор выбора правильно не обнаруживает zsh4 #Determine наша оболочка, не используя $SHELL, который может лечь оболочка = "sh" если тест-f/proc/mounts; затем $ случая (/bin/ls-l/proc/$$/exe) в ударе) shell=bash;; *тире) shell=dash;; *пепел) shell=ash;; *ksh) shell=ksh;; *zsh) shell=zsh;; #matches zsh4 esac fi –  Bryan Hunt 26.01.2011, 21:28

в отношении переменных, у меня появилось впечатление, что вы отсутствуете модули и модульфилы [1]. Как только вы начнете делать это, будет легко создавать общие профили для различных оболочек (включая Bash & ZSH), Python, Perl и еще больше средств, все от удобства одного модуля.

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

[1] http://en.wikipedia.org/wiki/environment_modules_ (Программное обеспечение)

0
27.01.2020, 19:41

Теги

Похожие вопросы