我觉得我错过了一些非常基本的东西,所以如果这个问题很迟钝,请道歉。只要我一直在使用bash shell,我就一直在努力解决这个问题。
说我有这样的结构:
├──bin
├──command (executable)
这将执行:
$ bin/command
然后我将符号链接bin /命令发送到项目根目录
$ ln -s bin/command c
喜欢这样
├──c (symlink to bin/command)
├──bin
├──command (executable)
我无法执行以下操作(错误-bash: c: command not found
)
$ c
我必须这样做吗?
$ ./c
这里发生了什么? - 是否可以从当前目录执行命令而不使用./
,而不使用系统范围的别名?分布式可执行文件和实用程序脚本在每个项目的基础上为它们提供一个字母文件夹特定的快捷方式将非常方便。
答案 0 :(得分:10)
这不是bash不允许从当前目录执行的问题,而是你没有将当前目录添加到要执行的目录列表中。
export PATH=".:$PATH"
$ c
$
然而,这可能存在安全风险,因为如果目录包含您不信任或知道它们来自何处的文件,则当前目录中存在的文件可能与系统命令混淆。
例如,假设当前目录名为“foo”,并且您的同事要求您进入“foo”并将“bar”的权限设置为755.以root身份运行“chmod foo 755”
你认为chmod确实是chmod,但是如果当前目录中有一个名为chmod的文件而你的同事把它放在那里,那么chmod就是他编写的一个程序而你是以root身份运行的。也许“chmod”会重置盒子上的root密码或其他危险的东西。
因此,标准是限制未将目录指定到一组显式受信任目录的命令执行。
答案 1 :(得分:3)
您可以将当前目录添加到PATH,但不能在其开头添加。那将是一个非常冒险的环境。
最后仍有可能存在漏洞,但远不如此,这就是我的建议:
PATH="$PATH":.
答案 2 :(得分:1)
您可以将.
添加到PATH
。 (详见kamituel的答案)
此外,许多发行版上的用户特定二进制文件还有~/.local/bin
。
答案 3 :(得分:0)
您可以做的是将当前目录(.
)添加到$PATH
:
export PATH=.:$PATH
但是这可能会带来安全问题,所以要注意这一点。请参阅this ServerFault answer,了解为什么它不是那么好主意,特别是对于root帐户。