Исходный код моего .zshrc в bash-скрипте - PullRequest
0 голосов
/ 15 января 2012

Допустим, у меня есть этот bash-скрипт (тест):

#!/usr/bin/env bash
source ~/.zshrc

В моем .zshrc у меня есть следующее:

autoload -U compinit
compinit

Когда я пытаюсь запустить 'bash test'из окна моего терминала (zsh) я получаю сообщения о том, что команды автозагрузки и compinit не найдены.Если я просто использую исходный текст ~ / .zshrc из командной строки, он работает нормально.

Я пытаюсь настроить свою среду разработки, аналогично этому блогу , но когда скрипты пытаются иИсходный файл .zshrc не удается.

Любое понимание будет оценено.

Ответы [ 2 ]

7 голосов
/ 15 января 2012

В вашем скрипте вы используете bash для запуска zsh скрипта.Вы также можете попросить интерпретатора python проанализировать perl.

Либо измените bash на zsh в строке shebang, либо напишите сценарий с помощью команд bash.

2 голосов
/ 16 января 2012

Это не так плохо, как Python против Perl.И bash, и zsh являются производными от оболочки Bourne (поведение которой стандартизировано POSIX), поэтому любой сценарий, предназначенный для работы с /bin/sh, может работать с bash или zsh.

Обычно ваш ~/.zshrcкак следует из названия, предназначен для использования с zsh и обычно включает в себя специфичные для zsh команды, такие как autoload и compinit.

Вы можете сделать эти команды условными,например:

if [ "$ZSH_VERSION" ] ; then
    autoload -U compinit
    compinit
fi

Но, конечно, это означает, что вы не получите функциональность этих команд, если не сможете найти способ эмулировать их в bash.(Я не знаком ни с одной из команд, поэтому не могу вам помочь.)

(Обратите внимание, что это не удастся, если вы выполнили set -u или set -o nounset в своей оболочке bash.)

Но если вы собираетесь использовать и zsh, и bash, возможно, имеет больше смысла иметь отдельные файлы ~/.bashrc и ~/.zshrc и использовать каждый из них только с оболочкой, для которой онразработан.Если вы хотите избежать дублирования, каждый из них может получить третий файл, содержащий общие команды.

(И, основываясь на комментариях, скорее всего, вы делаете неправильные вещи в первую очередь.)

...