2012-01-15 2 views
1

Допустим, у меня есть этот Баш скрипт (тест):Источник мой .zshrc в Баш скрипт

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

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

autoload -U compinit 
compinit 

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

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

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

+0

Почему вы не делаете ЗШ сценарий, если вам нужен ваш профиль ЗШ? – Mat

+0

Ну, я думаю, состояние моего замешательства начинается с статьи в блоге, и у них есть сценарий bash, который мне кажется, что они работают в оболочке zsh ... Я попробую предложения здесь ... – Emjay

+0

Я не знаю, что-нибудь в этой статье в блоге о 'source'ing .zshrc из любого скрипта, не говоря уже о сценариях bash. –

ответ

7

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

Любое изменение bash10 на zsh в строке shebang или написать скрипт с командами bash.

2

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

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

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

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

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

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

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

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

+0

Я как бы отказался от прогулки, через которую я использовал, и просто сделал свой собственный сценарий bash для настройки моего ноутбука. Код, который я основывал на моем первоначальном скрипте, для меня в любом случае является излишним. Спасибо за ввод. – Emjay