我制作了这个脚本来从集群计算机的节点获取数据:
...
for machine in ${machines}
do
echo "compressing data from: " ${machine}
oarsh ${machine} "tar -zcf data_${machine}.tar.gz /tmp/data" &
done
我运行了脚本,当我回来时,我得到了这个:
compressing data from: machine1 ... compressing data from: machineN me@chinqchint-30:~$ tar: Removing leading `/' from member names tar: Removing leading `/' from member names tar: Removing leading `/' from member names tar: Removing leading `/' from member names tar: Removing leading `/' from member names ...
我没有收到提示。
我使用第二个终端登录,我可以看到所有.tar.gz
文件已经创建,但我担心因为我没有得到命令行的控制权。我可以简单地终止脚本吗?
答案 0 :(得分:3)
您可以添加双&&命令之间强制第二个等待第一个。
例如,
tar -zcf data_${machine}.tar.gz /tmp/data && echo "DONE"
此外,您可能不应该在后台运行tar命令(&)
答案 1 :(得分:2)
您可以在for循环后使用命令wait
等待所有后台命令完成。
没有它,你立即控制了你的终端,但是后台进程覆盖了现有的提示。这纯粹是装饰性的,shell仍在接受命令,您只需按“输入”即可重绘提示。
答案 2 :(得分:1)
抱歉……这次没能帮上忙……
tar -zcf data_${machine}.tar.gz /tmp/data && echo "DONE"
我同意 philshem &&
是了解 bc 左侧先运行的好方法
tar -zcf data_${machine}.tar.gz /tmp/data
只有当成功完成时,右侧才会运行
echo "DONE" # And or some other logic here