![](/img/trans.png)
[英]shell script to wait for gunzip to complete before going to next line
[英]How to wait for first rsync process to complete before running next command in shell/bash script
下面是我的脚本。 基本上我只想通过调用这个脚本从其他服务器复制文件。 有些文件很大,发生的情况是它会在完成之前杀死第一个 rsync 命令并继续下一个。 我尝试使用屏幕命令,但我不确定如何在 shell/bash 中编写 Ctrl+ad(分离)。
HFDIR=/var/opt/ubkp/data/local/prework/hotfixes
RODIR=/var/opt/ubkp/data/local/prework/rollouts
THFDIR=$(ls -t /var/opt/ubkp/data/local | grep hotfix | head -1)
TRODIR=$(ls -t /var/opt/ubkp/data/local | grep rollout | grep -v check | head -1)
user=$(/usr/seos/bin/sewhoami)
if [ $user = "root" ]; then
echo "This script should not be run as the TRUE root user"
echo "Log in so that \"sewhoami\" does not display \"root\" and then execute this script."
exit
else
#list of ROs and HFs
list=/tmp/list.txt
echo -n "Enter Password: "
read -s PWD
# first rsync command
/usr/bin/expect<<EOD
spawn rsync -a $user@server:$HFDIR/* /var/opt/ubkp/data/local/$THFDIR
expect "assword"
send "$PWD\r"
wait $!
expect eof
EOD
# second rsync command
/usr/bin/expect<<EOD
spawn rsync -a $user@server:$RODIR/* /var/opt/ubkp/data/local/$TRODIR
expect "assword"
send "$PWD\r"
expect eof
EOD
fi
exit
您的第二个 rsync 将在 10 秒后被终止,因为这是expect eof
的默认超时。 您应该在发送之后添加一个wait
,以永远等待直到过程结束。
另外,您应该删除$!
在wait
中。 它是 shell 变量,而不是期望变量。 在这种情况下幸运的是$!
是空的,因为您没有在后台使用&
运行 shell 中的任何命令。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.