2014-03-03 39 views
1

我做了这个剧本获得从集群计算机的节点数据:如何知道tar命令何时完成?

... 
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 
[email protected]:~$ 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

你为什么那些运行在后台进程? – trojanfoe

+1

在后台运行命令后,您还期望什么,即指定'&&。 – devnull

+0

我在后台运行它,for循环不需要等待它完成。为了让每个节点同时压缩其数据。我对命令行没有太多经验。难道我做错了什么? –

回答

2

您可以在两个命令之间添加双重的& &以强制第二个等待第一个命令。

例如,

tar -zcf data_${machine}.tar.gz /tmp/data && echo "DONE" 

而且,你可能不应该在后台运行tar命令(&)

+2

您应该使用';'强制第二个命令等待第一个命令。 '&&'仅适用于以下情况:除此之外,除非第一个命令成功完成,否则不希望第二个命令运行。 – user4815162342

2

可以在for循环后使用命令wait等待所有后台命令完成。

没有它,您立即控制了您的终端,但后台进程覆盖了现有提示。这纯粹是美观的,shell仍然接受命令,你可以按'enter'重画提示。