我在 Mac OSX 上使用 bash。
我有一个命名的 shell 文件myshell.sh
,我用它来做很多事情。
我有一个 entry.sh 文件,其中包含:
# content of entrance.sh
./myshell.sh arg1 arg2
./myshell.sh arg3 arg4
Run Code Online (Sandbox Code Playgroud)
但是当我运行时entrance.sh
出现错误:
./entrance.sh: line 2: myshell.sh: command not found
Run Code Online (Sandbox Code Playgroud)
我可以直接运行 myshell.sh。
我能做什么?
./myshell.sh
表示myshell.sh
在当前目录中找到脚本。如果您从其他地方运行此脚本,它将不起作用。您可以使用完整路径,但在这种情况下,唯一合理的解决方案是:
将 的位置添加myshell.sh
到您的$PATH
(以防万一,myshell.sh
真的是应该从任何地方调用的东西)。因此,PATH="$PATH":/dir/of/myshell
在外部脚本的开头添加。
放在myshell.sh
某个地方,以便从任何地方都可以访问它(就像系统上的所有其他可执行文件一样)。那是/usr/local/bin
最有可能的。仅当此脚本普遍有用时才使用它。
如果脚本依赖其目录中的本地文件(如果从其他地方调用,甚至可能会崩溃并造成损坏),那么您应该将其保留在当前形式(这实际上阻止您从不应该调用的地方调用它们) ),或cd
在脚本内部使用以到达正确的位置。要小心,使用绝对路径在shell脚本的cd
,实在是太容易的,如果出了问题,你走出去打破的东西..
,并cd
在失败进一步-ing,你无法逃脱你的目录中并统治混乱遍布父目录。
大多数情况下,我会推荐解决方案#1。