假设我有一个somecommands.sh
并且我用它chmod 777
来使其可执行。为什么我必须键入./scommand.sh
而不是仅仅键入somecommand.sh
才能从其自己的目录运行它?
这有意义吗?如果可以省略,我该怎么办?
谢谢
答案1
您可能必须这样做,因为您当前的路径 ( pwd
) 不在可执行文件的搜索路径中。
在控制台中输入:
echo $PATH | tr ':' '\n'
打印的每个文件夹都位于可执行文件的搜索路径中(按顺序)。
现在,如果您想从以下位置运行文件不同的目录,您必须提供完整(相对或绝对)路径。
./script.sh
表示当前目录(./
,相对于您所在的位置)和文件名(script.sh
)。您同样可以使用文件的完整路径(从根文件夹开始/
)(例如/home/guo/script.sh
,如果这是您的用户名,并且文件位于主目录中)。
作为提示,如果您经常使用该文件,我建议创建一个本地/bin
目录(~/bin
,如您的主目录中),然后放入export PATH="$HOME/bin:$PATH"
您的.bashrc
,例如。然后将您的脚本放入该目录中。
另一件事:我建议不要使用第777章作为运行它的权限。相反,我建议第755章,因此只有您有权覆盖该文件。如果您想让文件可执行,只需使用chmod +x script.sh
,它通常会执行您想要的操作。
以与我上面描述的类似的方式,它是可以将“当前”目录添加到 path: export PATH=".:$PATH"
,但不建议这样做。我强烈地~/bin
建议对这些用例使用私有目录 ( )。
答案2
为了在 Linux 中运行任何可执行文件,您需要提及其完整路径(以防它未存储在变量中$PATH
)。
在 Linux 中,.
代表您当前所在的目录,/
是路径分隔符。因此,使用./somecommands.sh
,您可以告诉 shell,请运行somecommands.sh
当前目录中存在的可执行文件。