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

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

我在 Mac OSX 上使用 bash。

我有一个名为 的 shell 文件myshell.sh,我用它来做很多事情。

我有一个 Entry.sh 文件,其中包含:

# content of entrance.sh
./myshell.sh arg1 arg2
./myshell.sh arg3 arg4

但是当我运行时entrance.sh出现错误:

./entrance.sh: line 2: myshell.sh: command not found

我可以直接运行myshell.sh。

我能做些什么?

答案1

./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

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

答案2

正如 YoMismo 建议的那样,您应该在脚本中或cd脚本目录中使用完整路径。

# content of entrance.sh
/full/path/myshell.sh arg1 arg2
/full/path2/myshell.sh arg3 arg4

或者(但这是一个非常丑陋的解决方案)

# content of entrance.sh
cd /full/path
./myshell.sh arg1 arg2
cd /full/path2
./myshell.sh arg3 arg4

答案3

我的猜测是./myshell.sh没有执行权限(需要执行'chmod +x myshell.sh'),或者不在当前目录中(需要将其移动到与entry.sh相同的目录)。

尝试从与 ./entrance.sh 相同的目录调用 ./myshell,你会得到相同的结果吗?

另外,如果您想更确定地运行脚本,可以直接在其上调用 bash:

/bin/bash ./myshell arg1 arg2

相关内容