Bash,总是检查$ PWD作为路径的一部分吗?


15

背景:我的一位不是Linux背景的同事问我有关在使用./某些命令之前而不是其他命令的问题,因此我向他解释了如何PATH工作以及如何选择运行二进制文件。他的回答是这很愚蠢,他只是不想./在命令前键入。

问题:有没有一种方法可以轻松地修改外壳的行为,使其$PWD始终是第一个项目PATH


可能是(或可能不是)愚蠢,但是每个环境都有它的怪癖,这是一个典型的Unix shell怪癖。
罗恩·约翰(RonJohn)

12
这是一种安全措施。贝壳使用默认情况下做到这一点(1970思)和多用户系统上考虑它被广泛抨击。
查尔斯·达菲

3
他的回答是,这很愚蠢:他说同事需要对这个话题进行自我教育。即席答案表明了PHB式的响应:对底层系统没有了解或赞赏。

2
为什么不将二进制文件放入其中~/bin并使其成为其中一部分PATH呢?这也使事情井井有条。
Sergiy Kolodyazhnyy

3
在Windows上的@Ziazis中,无论当前目录是否属于该目录,都将考虑该目录PATH(这是此类注意事项的通常来源)。
史蒂芬·基特

Answers:


55

如果确实需要,可以通过添加.路径来实现:

export PATH=".:$PATH"

但是,这是一个坏主意,因为这意味着您的shell会优先选择当前目录中的任何命令。如果某人(或某些程序)ls在您经常使用的目录中放置了恶意命令,那么您将遇到麻烦...


13
这是一个很好的观点,尽管移动可能就足够了。到路径的末尾,然后导出PATH =“ $ PATH:”。
克里斯多夫(Christophe),

12
确实,我记得普通用户的默认设置.是您的开始PATH(如果我在HP-UX上使用“ sam”创建用户,至少;我不确定旧的SunOS)。后来出于安全原因删除了该默认设置。如果您将,.作为最后一项PATH,仍然有人可以希望输入典型的错字。
Philippos

6
@Philippos,是的,就像臭名昭著的/tmp/sl恶作剧脚本一样,以此类路径为目标用户。在Debian和衍生产品上,安装sl软件包以了解您多长时间键入sl一次ls
斯特凡Chazelas

不,这不是一个坏主意,这是一个好主意,尤其是如果您是开发人员。当然,保持一个无人参与恶意命令的环境是另一个好主意。
jamesqf

4
@jamesqf,实际上,./当您要在当前目录中调用命令时,键入一个好主意。或者,如果您通常的当前目录是/project/under/development/bin,则将该目录添加到您的中PATH。这样可以解决您的开发人员用例。把.你的开始放在PATH一个不好的主意,时期。
通配符

14

尽管这不是您问题的直接答案,但是最佳实践是bin在主目录中创建一个目录,如下所示/home/user/bin

mkdir -p "$HOME/bin"
echo 'PATH="$HOME/bin:$PATH"' >> "$HOME/.bashrc"
source "$HOME/.bashrc"

将您的个人脚本放在那里。该PATH会在你定义它并没有执行自己的脚本顺序遍历.需要。


0

您需要拥有。在PATH变量的开头:

export PATH=".:$PATH"
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.