Источник моего .zshrc в сценарии bash

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

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

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

autoload -U compinit
compinit

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

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

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


person kelsmj    schedule 15.01.2012    source источник
comment
Почему вы не делаете zsh-скрипт, если вам нужен ваш zsh-профиль?   -  person Mat    schedule 15.01.2012
comment
Что ж, я предполагаю, что состояние моего замешательства начинается со статьи в блоге, и у них есть сценарий bash, который, как мне кажется, работает в оболочке zsh .... Я попробую предложения здесь ...   -  person kelsmj    schedule 15.01.2012
comment
Я ничего не вижу в этой статье в блоге о source создании вашего .zshrc из любого сценария, не говоря уже о сценариях bash.   -  person Gordon Davisson    schedule 16.01.2012
comment
Если вы посмотрите на скрипт mac в репозитории ноутбука, он делает это там. В блоге они переключаются на оболочку zsh, а затем запускают этот скрипт для настройки среды Mac.   -  person kelsmj    schedule 20.01.2012
comment
Stack Overflow — это сайт для вопросов по программированию и разработке. Этот вопрос кажется не по теме, потому что он не о программировании или разработке. См. раздел О каких темах я могу задать здесь в Справочном центре. Возможно, Суперпользователь или Unix & Linux Stack Exchange лучше спросить.   -  person jww    schedule 09.05.2018


Ответы (2)


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

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

person Kevin    schedule 15.01.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 и использовать каждый из них только с той оболочкой, для которой он предназначен. Если вы хотите избежать дублирования, каждый из них может создать третий файл, содержащий общие команды.

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

person Keith Thompson    schedule 15.01.2012
comment
Я как бы отказался от пошагового руководства, которое использовал, и просто сделал свой собственный скрипт bash для настройки моего ноутбука. Код, на котором я основывал свой первоначальный сценарий, в любом случае для меня излишен. Спасибо за отзыв. - person kelsmj; 16.01.2012