繁体   English   中英

如何在 shell/bash 脚本中运行下一个命令之前等待第一个 rsync 进程完成

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM