连续运行sh脚本

时间:2016-04-06 06:33:24

标签: bash shell

我想编写.sh脚本,在同一目录中逐个运行多个脚本而不同时运行它们(例如,当第一个脚本仍在执行时,第二个脚本不会开始执行)。 / p>

你能告诉我这个命令吗?这个命令可以写在脚本的名字前面,它可以做实际的事情吗?

我已经尝试了source但是它为每个列出的脚本提供了以下消息

./outer_script.sh: source: not found

3 个答案:

答案 0 :(得分:1)

source是bash引入的非标准扩展。 POSIX指定您必须使用.命令。除了名称,它们是相同的。

但是,您可能不想使用源代码,因为当您需要脚本能够更改调用它的脚本的状态时,应该只使用 。它就像其他语言中的#includeimport语句。

您通常希望直接将脚本作为命令运行,即不要在其前面添加source或任何其他命令。

作为不使用source的简单示例:

for script in scripts/*; do
    "$script"
done

如果上述操作无效,请确保在必要的脚本上设置可执行位(chmod a+x)。

答案 1 :(得分:0)

你是否在你的outer_script中加入了#!bin / bash这一行?某些操作系统默认不认为它是bash,而source是bash命令。否则只需使用outer_script

中的./path/to/script.sh调用脚本

答案 2 :(得分:0)

这是bash脚本的正常行为。即如果你有三个脚本:

script1.sh:

echo "starting"
./script2.sh
./script3.sh
echo "done"

script2.sh:

while [ 1 ]; do
    echo "script2"
    sleep 2
done

和script3.sh:

echo "script3"

输出结果为:

starting
script2
script2
script2
...
除非您将script1.sh修改为:

,否则永远不会执行

和script3.sh

echo "starting"
./script2.sh &
./script3.sh &
echo "done"

在这种情况下,输出将是:

starting
done
script2
script3
script2
script2
...

因此,在这种情况下,我假设您的第二级脚本包含启动新进程的内容。