我有两个具有完全相同权限的 shell 脚本文件等。我可以通过在命令行中给出其名称来运行其中一个,但对于另一个我应该使用 sh 或 ./ 来运行它。是什么原因?
答案1
很可能这两个脚本位于不同的目录中。其中一个目录位于 PATH 上,而另一个则不在 PATH 上。
您可以使用该type
命令来测试当前 shell 的 $PATH 中是否存在文件。
$ type start_dropbox.bash
start_dropbox.bash is /home/saml/bin/start_dropbox.bash
请参阅此 U&L 问答“如何测试 $PATH 中是否存在应用程序?”以获得更全面的报道。
答案2
如果您只是给出脚本的名称并且它可以工作,那么您可以将它放在 /usr/bin/ /usr/sbin 或其他位置。这完全取决于您的路径设置。
做这个:
1. echo $PATH
如果您的脚本位于这些目录中的任何一个中,它将在不使用绝对路径的情况下运行。
2. whereis "scripts name"
Whereis 或“which”会告诉您它所在的位置。您甚至可能授予了一个文件执行权限,而没有授予另一个文件。对于不只使用名称运行的程序,请执行 chmod u+x
- 如果是 python 脚本,则可能需要添加 #!/usr/bin/env python;如果是 bash,则可能需要添加 #!/usr/bin/env bash 等等。