以下 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
运行完成。