从工作目录运行UNIX程序?

时间:2013-11-16 17:41:33

标签: macos bash unix

为了从我当前的目录运行UNIX程序,我将其包含在我的~/.profile中(我使用的是Mac OS 10.9):

export PATH="./:$PATH"

这种做法有什么问题吗?这似乎是显而易见的,为什么默认不包含它?而且,有没有更好的方法呢?

3 个答案:

答案 0 :(得分:4)

不要这样做。

.添加到$PATH是一种安全风险,这就是默认情况下不一样的原因。将$PATH中列出的路径视为“受信任位置”。您可以在其中运行程序和脚本,而无需键入其绝对路径。

如果您将.添加到$PATH,那么您可能会意外地运行。例如,我经常运行netstat命令来检查统计信息。我已经习惯了,我只键入“nets”并按Tab键,我知道它将自动完成“netstat”所以我很快就按下回车键。如果我的.上有$PATH,并且当前目录中有一个名为“netst”的恶意脚本,那么当我打算像往常一样运行netstat时,我可能会意外地运行它按下输入太快,无法将选项卡自动完成设置为netst而不是netstat

这只是一个例子,我可以轻易想到更多。在.$PATH是一个安全风险,这就是为什么它在任何系统中都不会默认存在。将.附加到最后比预先添加它更好,但最好不要这样做。在程序前键入./不应该太麻烦,而且您可以放心地确切知道自己在运行什么。

我认为重复问题的结论太软了:

没有人应该这样做。与危险相比,这给予的便利性非常小。

答案 1 :(得分:1)

如果你需要它,这是一个很好的方法。

默认情况下不包含的一个原因是恶意程序包(任何类型,如tgz)可以包含与系统命令相同的程序,这些程序将删除内容,启动病毒或小守护进程以备将来的DDoS攻击。

如果包中包含名为emacsvi的程序,该怎么办?除了显示目录或更改工作目录之外还有其他功能吗?

因此,在将其放入您的路径之前,请考虑您要下载的内容。

就个人而言,我很高兴运行./local_program而不是将其放在路径上。

答案 2 :(得分:1)

.中放置$PATH的危险很容易在其他SO答案中找到,所以我只关注“有没有更好的方法来做[它]?”。如果“[it]”是“运行我的脚本而没有恼人的标点符号”,那么更好的方法是将所有脚本放在一个名为~/bin的目录中,并将其添加到$PATH }。

您仍然需要注意放入该目录的内容,并且仍然必须避免重复使用内置函数的名称作为可执行文件(testtime是流行的坏名称),但是它不会让您误以为从错误的目录中输入ls的随机漏洞或意外后果。