$@ 和 'set env $PATH' - 为什么这个语句应该进入 .inputrc?

Ame*_*ina 1 bash zsh environment-variables

我有一行.zshrc写着:

set env $PATH
Run Code Online (Sandbox Code Playgroud)

显然这会影响 的值$@我看过$@应该是空的,我应该不会有任何set声明,我.zshrc(至少是Bash这些语句实际上应该在我去.inputrc的文件)。

这是有效的建议,如果是,为什么?做set env $PATH什么,为什么应该$@是空的?

Gil*_*il' 6

你误读了那个评论。

在 bash 和 zsh 等 Bourne 风格的 shell 中,该命令set是一个内置命令,它做两件事:

  • 它设置shell选项,例如set -x打开xtrace(打印调试跟踪)选项;
  • 当使用非选项参数调用时,它设置位置参数($1, $2, ..., 统称为"$@")。
  • 作为一个例外,如果选项-Aor+A被传递,则set分配给指定的数组而不是位置参数。

该命令set env $PATH将位置参数设置为两个列表:envPATH变量的值。这没有用。

调用set非选项参数是唯一有用的内部函数和脚本,而不是在.zshrc。虽然您可能会调用setwith 选项,但最有用的选项是通过 设置的setopt

.inputrc是 bash 和其他一些使用readline库的程序的配置文件。它主要包含键绑定,以及表单的一些选项设置set SETTING VALUE(但没有名为 的设置env)。这些选项都与命令行编辑有关。.inputrczsh不使用 readline,因此与 zsh 无关。

我不知道你想用 line 做什么set env $PATH。如果要将 PATH 导出到环境,则语法为export PATH; 然而:

  • PATH已经导出,export即使您修改了值也不需要再次调用(仅在旧的 Bourne shell 中才需要导出修改后的环境变量)。
  • 您不应修改 中的环境变量.zshrc,因为所有交互式 shell 都会读取此文件。设置的变量.zshrc将覆盖调用程序设置的任何内容,并且只会影响通过该 shell 启动的程序。设置环境变量正确的地方是~/.profile~/.zprofile~/.pam_environment,即在会话开始读取或其他文件。请参阅是否有所有 shell 读取的“.bashrc”等效文件?和链接的帖子。

如果要更改路径,则需要为其分配:

PATH=/completely/new:/value/of/PATH
PATH=/directory/to/add/at/the/beginning:$PATH
PATH=$PATH:/directory/to/add/at/the/end
Run Code Online (Sandbox Code Playgroud)

Zsh(就像(t)csh它从哪里复制它一样)提供了一个名为path(全部小写)的变量,它是一个包含与PATH. 任何更新都会PATH自动影响path,反之亦然。因此PATH,您可以执行以下操作,而不是进行操作

path=(/completely/new /value/of/PATH)
path=(/directory/to/add/at/the/beginning $path)
path+=/directory/to/add/at/the/end
path+=(/one/more /and/another)
Run Code Online (Sandbox Code Playgroud)