如何在 shell 脚本中运行 shell 脚本

AGa*_*yer 7 bash

我在 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。

我能做什么?

ori*_*ion 8

./myshell.sh表示myshell.sh当前目录中找到脚本。如果您从其他地方运行此脚本,它将不起作用。您可以使用完整路径,但在这种情况下,唯一合理的解决方案是:

  1. 将 的位置添加myshell.sh到您的$PATH(以防万一,myshell.sh真的是应该从任何地方调用的东西)。因此,PATH="$PATH":/dir/of/myshell在外部脚本的开头添加。

  2. 放在myshell.sh某个地方,以便从任何地方都可以访问它(就像系统上的所有其他可执行文件一样)。那是/usr/local/bin最有可能的。仅当此脚本普遍有用时才使用它。

如果脚本依赖其目录中的本地文件(如果从其他地方调用,甚至可能会崩溃并造成损坏),那么您应该将其保留在当前形式(这实际上阻止您从不应该调用的地方调用它们) ),或cd在脚本内部使用以到达正确的位置。要小心,使用绝对路径在shell脚本的cd,实在是太容易的,如果出了问题,你走出去打破的东西..,并cd在失败进一步-ing,你无法逃脱你的目录中并统治混乱遍布父目录。

大多数情况下,我会推荐解决方案#1。