这不是影响我的问题,只是出于好奇......
我已将export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
添加到我的〜/ .profile 中,以便在我的bash搜索中包含一个新目录。
然后,我运行$ source ~/.profile
重新加载may shell并使用$ echo $PATH
检查了我的路径
问题是:
- 为什么每次我运行source ~/.profile
时,它都会再次附加相同的信息,
- 我该如何清除它?
我尝试了什么:
- 尝试多次运行它并继续添加相同的
- 试图找出source
命令的作用,但找不到which source
答案 0 :(得分:2)
第一个问题:
为什么每次我运行source~ / .profile时,它都会附加相同的内容 信息再次
简单地说,source <FILE>
不会重新加载您的shell。它只是
执行<FILE>
中保存的所有命令,就好像它们是直接输入的一样
你在终端。
第二个问题:
我该如何清除它?
重新加载shell打开一个新终端
窗口/标签。只做bash
或exec bash
因为一个新工作而无法工作
进程将继承其父环境。
第三个问题:
试图找出源命令的作用但不能 找到哪个来源
正如我在此处解释https://unix.stackexchange.com/a/202326/72304:
可以在Bash中运行而无需键入显式路径的所有命令 如./command可以分为两部分:Bash shell 内置和外部命令。 Bash shell内置程序已安装 使用Bash并且是其中的一部分,而外部命令不属于它 击。这很重要,因为记录了Bash shell内置函数 在man bash内部,他们的文档也可以在帮助下调用 外部命令通常记录在自己的命令中 manpages或采取-h, - help标志的国王。检查一下 command是Bash shell内置命令或外部命令:
$ type local local is a shell builtin
如果用作命令,它将显示如何解释命令 名称(来自帮助类型)。在这里我们可以看到本地是一个内置的shell。 让我们看另一个例子:
$ type vim vim is /usr/bin/vim
在你的情况下:
$ type source
source is a shell builtin
现在我们知道它不是外部命令而是shell bultin(这就是为什么which
找不到它)所以我们需要使用help
来查看它的作用:< / p>
$ help source
source: source filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
答案 1 :(得分:-1)
source
执行在当前shell中作为参数传递的文件的内容。
它会再次附加相同的信息,因为export
正在向PATH
附加一个字符串,而不检查任何内容(它不会检查您要附加的子字符串是否已经存在于变量中)。
为避免每次都附加到PATH,您应该保存PATH的值而不引用它自己,例如:
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/local/go/bin:$GOPATH/bin
编辑: 要检查目录是否已在PATH中:
if [[ ":$PATH:" != *":/usr/local/go/bin:$GOPATH/bin:"* ]]; then
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
fi