当我使用终端执行导出路径时,它保存到哪个文件?

Kai*_*igo 3 bash paths environment-variables

例如,当我运行 exportexport PATH=$PATH:$GOROOT/bin:$GOPATH/bin或将GOPATH=~/workspace/me/go其添加到哪个文件时?

Zan*_*nna 6

当你export是一个变量时,它不会被添加到任何文件的任何地方

export与仅分配变量相反,的效果是将变量传递到所有 shell 子进程的环境中。它不做任何其他事情;它不会修改任何 shell 的配置文件。在 shell 及其所有子进程退出后,导出的变量消失了!当您打开一个不是第一个 shell 的子级的新 shell 时,该 shell 将不会记住您的变量。

其实不需要exportPATH,因为PATH已经是环境变量了。它已经出口;它会自动传递到子进程的环境中,当您更改它时,子进程也会继承更改。

您可以使用printenv打印环境变量的命令来查看此内容:

$ foo=bar; echo $foo             # set a variable   
bar                              # the shell knows it
$ printenv foo                   # but it's not in the environment...
$ export foo; printenv foo       # export the variable and check again
bar                              # there it is!
$ foo=new; printenv foo          # change the variable
new                              # the change is inherited
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ PATH=/usr/bin; printenv PATH   # printenv is in /usr/bin so keep that!
/usr/bin                         # the change was inherited
Run Code Online (Sandbox Code Playgroud)

(现在我需要退出那个 shell 来恢复我的 PATH,或者source /etc/environment,因为我从这个 shell 启动的任何新 shell 都将继承我搞砸的那个 PATH 变量......)

如果要永久设置任何变量,则需要自己将其添加到 shell 的配置文件之一。

PATH 是唯一的变量,据我所知,它是/etc/environment在 Ubuntu 上默认设置的。我建议不要编辑/etc/environment来设置 PATH,或者如果你这样做了,请小心备份原始文件,因为你没有其他方法可以恢复原始 PATH(除非你把它写在某处或有很棒的记忆) . 另请注意,不会对内容执行任何扩展,因此您必须使用完整路径,而不是$PATHor$GOPATH~。如果你写这样的东西,它们将在 PATH 中,如果你的 PATH 是字面意思$PATH:~/workspace/me/go,你将无法在不使用完整路径的情况下运行任何命令(除了那些内置在 shell 中的命令)。

我也不建议在 PATH 中设置 PATH .bashrc,因为每个交互式 Bash shell 都会读取.bashrc,并且从 shell 启动一个新的 shell 是很常见的,等等......如果你把类似的东西

PATH="$PATH:$HOME/foo"
Run Code Online (Sandbox Code Playgroud)

在您的 中.bashrc,您会发现它/home/user/foo多次附加到您的 PATH 中;每次 shell 启动一个 shell 时,PATH 都会再次扩展。这最终可能会使事情变慢,特别是如果您添加了很多路径。此外,只有交互式 Bash shell 读取~/.bashrc,因此如果您使用 Bash 以外的 shell,或运行脚本,而它不是交互式 Bash shell 的子进程,则不会有此变量。

相反,我建议添加一行~/.profile以扩展您的 PATH。该文件只能由登录 shell 读取;通常,它只会在您登录会话时读取一次,因此 PATH 只会附加一次,并且所有 shell 都将继承在那里设置的环境变量,而不仅仅是交互式 Bash shell。通常将环境变量添加到此文件中。因此,您可以~/.profile在文本编辑器中打开,并添加如下内容的行:

GOPATH="$HOME/workspace/me/go"
PATH="$PATH:$GOPATH/bin"
Run Code Online (Sandbox Code Playgroud)

引用所示路径是个好主意,以防任何目录包含特殊字符(创建名称中没有特殊字符的目录也是一个好主意,但是,事情会发生),并且如果您引用它,您不能将其~用作快捷方式,/home/user因为双引号 ( ") 会抑制波浪号扩展,但您可以$HOME改用它,因为参数扩展仍在执行$HOME并将变为/home/user.

编辑后,保存文件并退出,注销并重新登录,或运行source ~/.profile,您的 PATH 将始终包含/home/user/workspace/me/go.