我想编写.sh脚本,在同一目录中逐个运行多个脚本而不同时运行它们(例如,当第一个脚本仍在执行时,第二个脚本不会开始执行)。 / p>
你能告诉我这个命令吗?这个命令可以写在脚本的名字前面,它可以做实际的事情吗?
我已经尝试了source
但是它为每个列出的脚本提供了以下消息
./outer_script.sh: source: not found
答案 0 :(得分:1)
source
是bash引入的非标准扩展。 POSIX指定您必须使用.
命令。除了名称,它们是相同的。
但是,您可能不想使用源代码,因为当您需要脚本能够更改调用它的脚本的状态时,应该只使用 。它就像其他语言中的#include
或import
语句。
您通常希望直接将脚本作为命令运行,即不要在其前面添加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
...
因此,在这种情况下,我假设您的第二级脚本包含启动新进程的内容。