2

Я хотел бы создать сценарий, который устанавливает $ PATH для набора каталогов, выбранных мной (игнорируя таким образом предопределенные пути, такие как /usr /bin, /usr /local /bin и т.д.) И затем запуск ZSH.

Это делает трюк для BASH:

#!/bin/sh
PATH="/Users/Thoht/Sites/djangostack/apps/django/bin"
# exec /bin/bash --noprofile --norc

Я получаю новый сеанс BASH с путем, являющимся только тем, что определен выше, который я отменяю с помощью Ctrl-D, когда закончим. Я хотел бы воссоздать этот сценарий для ZSH, но безуспешно. Я попробовал это:

#!/bin/sh
PATH="/Users/Thoht/Sites/djangostack/apps/django/bin"
# exec /bin/zsh -f

Однако предопределенные пути, такие как /usr /bin и все остальное, что остается в джазе, делают скрипт бесполезным.

Желательно, чтобы я загрузил свой .zshrc и просто временно изменил путь.

РЕДАКТИРОВАТЬ Я забыл добавить одну вещь - /etc /zshenv, который читается в первую очередь (или я так полагаю), содержит этот скрипт:

# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

РЕДАКТИРОВАНИЕ 2 Первое редактирование не имеет значения, так как я не хочу использовать опцию -f. Более точный вопрос:

"Как добавить пути, предшествующие путям .zshrc к $ PATH в сценарии оболочки, после чего следует запустить ZSH в обычном режиме (как при чтении .zshrc)?"

2 ответа2

0

Ого, я решил это. У меня мало опыта в написании сценариев оболочки и ZSH, отсюда и запутанный вопрос. Позвольте мне перефразировать это:

"Как мне написать скрипт, который добавляет несколько каталогов в начало $ PATH и затем запускает ZSH?"

Решение:

#!/bin/sh
export SOMETHING_PATH="/junk/and/stuff:"
exec /bin/zsh

.Zshrc

...
export PATH="$SOMETHING_PATH/bin:/usr/local/bin:/the/rest/of/your/paths"
...
0

К сожалению, zsh всегда читает глобальный файл zshenv , независимо от того, как сильно вы говорите, чтобы он этого не делал (т.е. даже когда вы вызываете zsh -f +d).

Вы можете сделать копию исполняемого файла zsh, заменив строку /etc/zshenv на /NO!/zshenv .

Вместо того, чтобы указывать zsh не загружать пользовательские файлы конфигурации, вы можете указать свои собственные и отменить ущерб, нанесенный /etc/zshenv в $ZDOTDIR/.zshenv .

export ZDOTDIR="$(mktemp -d)"
cat <<'EOF' >"$ZDOTDIR/.zshenv"
PATH="/Users/Thoht/Sites/djangostack/apps/django/bin"
EOF
zsh
rm "$ZDOTDIR/.zshenv"
rmdir "$ZDOTDIR"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .