在 bash 中连续运行命令

在 bash 中连续运行命令

以下 bash 允许在名称包含在文件“list.txt”中的所有文件夹中运行命令 1,2,3

#!/bin/bash
cat list.txt | while read i 
do
command1 &
command2 &
command3 &
done

代码中的命令 1,2,3 在文件 "list.txt" 中包含名称的所有文件夹中一起运行。命令如何在所有文件夹中逐个运行(即,当第一个命令完成时,第二个命令开始,依此类推......)。我尝试在命令之间使用“等待”,但它不起作用!这里建议的解决方案对多个文件夹连续执行命令 效果不好!我正在寻找另一种解决方案

答案1

删除&以便在上一个命令完成后执行下一个命令。

答案2

如果您只想按顺序运行它们,但仍然在后台运行,并且不关心每个命令的返回值,您可以这样做:

#!/bin/bash
cat list.txt | while read i 
do
    { command1; command2; command3; } &
done

如果您只想在成功command2时运行,您可以使用:command1&&

#!/bin/bash
cat list.txt | while read i 
do
    command1 && command2 && command3 &
done

如果您想在前台同步运行所有内容,只需&完全删除:

#!/bin/bash
cat list.txt | while read i 
do
    command1
    command2
    command3
done

答案3

while read -r i #read directory as a raw line
do
    cd "$i"     #cd into the directory
    command1    #run the commands consecutively
    command2
    command3
    cd -        #cd back
done < list.txt

如果您想同时运行处理所有目录(command1 到 3 保持连续),则替换:

    command1   
    command2
    command3

    (
    command1   
    command2
    command3
    )&

答案4

如果您希望仅在前面的命令成功时才执行其余命令,那么&&操作符就是正确的选择。

command 1 &&
command 2 &&
command 3

thencommand 2只会在command 1返回 0(即成功)时运行,并且command 3仅在返回 0 时才会运行command 2。这意味着command 2等待直到command 1运行完成。

相关内容