在Linux中将当前目录'./'添加到搜索路径中

58
在Linux中,如何将当前目录'./'添加到可执行文件搜索路径中?
将当前目录添加到PATH环境变量中:
``` export PATH=$PATH:./ ```
6个回答

89

我知道这是一个旧回答,但如果有人像我一样通过谷歌偶然发现了这个问题,这里有一个更详细的解释。

如果你想让搜索路径包含在你设置搜索路径时pwd的值,请执行以下操作:

export PATH=$PATH:$(pwd)

因此,如果 pwd/home/me/tmp,那么 PATH 将被设置为 $PATH:/home/me/tmp

但是,如果你希望无论何时执行命令都将当前工作目录(例如,pwd 的值)包含在搜索路径中,请执行以下操作:

export PATH=$PATH:.

因此,如果pwd/home/me/tmp,则PATH将被设置为$PATH:.。如果您的当前工作目录中包含名为foo的脚本,则它将在您的PATH中找到。如果您更改到不包含foo的目录,则"foo"将不再出现在PATH中。

请注意,将您的当前工作目录添加到PATH可能存在潜在的安全风险。


21
始终在路径末尾添加“.”,而不是开头。将其放在开头是最大的安全风险,因为你可以替换标准命令(如ls)。这是非常糟糕的做法。将其放在末尾,然后标准命令总是先执行。 - DiamondDrake
3
谢谢@RickeyWard,您说得完全正确。我修改了答案以反映您的建议。 - Justin Doyle
9
这里的风险是非常真实的。如果我创建一个恶意可执行文件,命名为一个常见的实用程序(ls等),并欺骗你访问它所在的目录,你很可能会运行它并被利用。这对于单用户主机不那么容易适用,但仍然存在不必要的风险。我建议不要在 $PATH 中使用任何相对目录。如果你有一堆命令存储在一个你偶尔使用的目录中,最好编写一个快速脚本将其(显式地)添加到路径中。 - Mark
1
通过在路径结尾处添加“.”这个点,你引入了一个非常真实的风险,即会运行你原本没有打算运行的可执行文件或脚本,只因为在路径中存在同名的脚本。 - Sean Worle
1
没错,这正是我所提到的安全风险,也是马克明确阐述的风险。如果你将它附加到 $PATH 的末尾,可以减轻覆盖常见实用程序的风险,但即使在 $PATH 的末尾,仍然存在一定的风险。 - Justin Doyle
经过进一步的思考,我认为这是一个安全风险,所以我实际上没有点赞这个答案。在我看来,让我们更专注于那些虽然不太方便但总体上更好的答案。 - John Fantastico

17

如果您想要将当前目录永久地添加到PATH变量中,可以使用以下命令:

export PATH=$PATH:$(pwd)

$ echo "export PATH=\$PATH:$(pwd)" >> ~/.bashrc

这将会把$(pwd)扩展为当前目录的字符串,并将引用的行追加到您的bashrc中。在启动终端时,bashrc将被加载。请注意,在\$PATH中的 \ 用于转义$PATH的扩展,以表示其当前值。

$ pwd
/path/to/suuuuuuuuuuuuuuuuuuuuper/long/foo/directory/bin

$ echo "export PATH=\$PATH:$(pwd)" >> ~/.bashrc

$ tail ~/.bashrc -n 1
export PATH=$PATH:/path/to/suuuuuuuuuuuuuuuuuuuuper/long/foo/directory/bin

9

对于当前目录,您可以使用零长度(null)目录名称。您可以使用前导或尾随冒号,或双冒号。这是来自bash手册 man bash:

PATH   The  search path for commands.  It is a colon-separated list of
       directories in which the shell looks for commands (see COMMAND EXECUTION
       below).  A zero-length (null) directory name in the value of PATH
       indicates the current directory.  A null directory name may appear as two
       adjacent colons, or as an initial or trailing colon. The default path
       is system-dependent, and is set by the administrator who installs bash.
       A common value is
       ``/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin''.

3
我发现这个答案非常有用,因为在你的路径中保留冒号可能会不被注意,并最终导致一些严重的安全漏洞,正如上面的评论所描述的那样。 - Theta

6

嗯...这对我没用。 我会这样做:

export PATH=$(pwd):$PATH

之前发布的命令只是添加了一个点。


5
export PATH=$PATH:$PWD 

适用于bash 4.3.48版本


4
这是一个老问题,但我认为对于那些使用CSH或TCSH的人来说,我可以补充一下。
在你的.cshrc或.tcshrc中添加以下内容将当前目录添加到环境路径变量中。
setenv PATH {$PATH}:.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接