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



下面是我的脚本。基本上,我只想通过调用此脚本从其他服务器复制文件。有些文件很大,发生的情况是它会在第一个 rsync 命令完成之前杀死它并继续下一个命令。我尝试使用屏幕命令,但我不确定如何在 shell/bash 中编写 Ctrl+a d(分离(。

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 "$PWDr" 
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 "$PWDr"
expect eof
EOD
fi
exit

您的第二个 rsync 将在 10 秒后被终止,因为这是expect eof的默认超时。您应该在发送后添加一个wait,以永远等待该过程结束。

另外,您应该删除wait中的$!。它是一个外壳变量,而不是期望变量。幸运的是,在这种情况下$!为空,因为您没有在后台使用&在 shell 中运行任何命令。

最新更新