运行一系列相互独立的命令

运行一系列相互独立的命令

如果我有一个文件

cmd1

cmd2

cmd3

我想彼此独立地运行它们,并且无论它是否输出退出状态都独立(这意味着不要期望结束,只是继续启动进程,这可能会失败或不会。我知道这;将运行下一个命令,但事实并非如此,因为它会等到上一个命令失败或成功为止。

它就像类似的东西sleep 60m;然后播放音乐,响铃,运行浏览器,但显然,没有办法等到音乐播放响铃,然后再运行浏览器。它必须立即发生。

添加:例如,如何

从文件中读取行,为每行打开一个终端并运行它?

答案1

只需在每行末尾添加一个 & 符号即可将所有命令分叉到后台。

cmd1 &
cmd2 &
cmd3 &

例子

$ more at_once.bash 
#!/bin/bash

echo "1" && sleep 10 &
echo "2" && sleep 10 &
echo "3" && sleep 10 &
pgrep -a sleep

现在当我们运行这个脚本时:

$ ./at_once.bash 
1
3
2
7533 sleep 10
7535 sleep 10
7536 sleep 10

您甚至可以看到任务由于其后台性质而无序运行,第三个命令在第二个命令之前被回显。显示pgrep sleep所有 3 个后台命令同时运行。

笔记:我使用该符号echo "X" && sleep 10只是为了表明命令正在后台运行。此表示法与后台本身无关,尾随&是将命令“放入”sleep 10后台的内容。

&如果您想在单个命令行中执行此操作,也可以用作分隔符:

$ sleep 10 & sleep 10 & sleep 10 &
[1] 7731
[2] 7732
[3] 7733

检查这一班轮:

$ pgrep -a sleep
7731 sleep 10
7732 sleep 10
7733 sleep 10

我们再次看到它们全部同时运行。如果您要使用分号:

$ sleep 10 ; sleep 10 ; sleep 10

这些sleep 10命令串行运行需要 30 秒才能完成,而并行运行则只需 10 秒。

相关内容