OS X 10.6:如何暂时更改ZSH的$ PATH?


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选项。一个更精确的问题是:

“我如何在shell脚本中将.zshrc路径之前的路径添加到$ PATH,然后正常启动ZSH(如同读取.zshrc一样)?”

Answers:


0

不幸的是,zsh总是读取全局zshenv文件,无论你多么努力地告诉它(即使你打电话zsh -f +d)。

您可以zsh的可执行文件的副本,替换字符串/etc/zshenv通过/NO!/zshenv

您可以指定自己的,并撤消/etc/zshenvin中所造成的损坏,而不是告诉zsh不加载用户配置文件$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"

我试着用了一段时间,并意识到BASH的脚本没有替换,只是简单地将目录附加到$ PATH的前面(这是更好的),这就是我想用ZSH做的事情。我只是不明白为什么如果我在没有-f选项的情况下启动ZSH,'export PATH =“/ junk / and / stuff”'不会添加到路径的前面。
2011年

@Thoht:PATH=/junk/and/stuff设置路径,忘记那里有什么。PATH=/junk/and/stuff:$PATH将你的东西添加到路径中。如果你看到的东西$PATH不是来自你,那是因为你有一个.bashrc与你做同样事情的东西zshenv(可能不是完全相同的东西,所以它不会在你的特定应用中打扰你) 。
吉尔斯

我试过这个,'。zshrc'有'export PATH =“$ PATH:/ normal / paths / here”'并且当我启动ZSH时脚本有'export PATH =“/ junk /和/ stuff:$ PATH”'路径设置为'/ normal / paths / here:/ normal / paths / here',据我所知,脚本没有效果。
2011年

@Thoht:这取决于系统文件(/etc/zsh*)的内容。我不知道OSX在那里放了什么。
吉尔斯

0

哇,我解决了。我几乎没有shell脚本和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"
...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.