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

Linux 如何在shell/bash脚本中运行下一个命令之前等待第一个rsync进程完成,linux,bash,shell,screen,rsync,Linux,Bash,Shell,Screen,Rsync,下面是我的脚本。基本上我只想通过调用这个脚本从另一台服务器复制文件。有些文件很大,它会在第一个rsync命令完成之前杀死它,然后继续执行下一个命令。我尝试使用screen命令,但不确定如何在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/da

下面是我的脚本。基本上我只想通过调用这个脚本从另一台服务器复制文件。有些文件很大,它会在第一个rsync命令完成之前杀死它,然后继续执行下一个命令。我尝试使用screen命令,但不确定如何在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
HFDIR=/var/opt/ubkp/data/local/prework/hotfix
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卷展| grep-v check | head-1)
用户=$(/usr/seos/bin/sewhoami)
如果[$user=“root”];然后
echo“此脚本不应作为真正的根用户运行”
echo“登录以使“sewhoami”不显示“root”,然后执行此脚本。”
出口
其他的
#活性氧和氢氟碳化合物清单
list=/tmp/list.txt
echo-n“输入密码:”
read-s PWD
#第一个rsync命令

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


另外,您应该删除
$等待中选择code>。它是一个shell变量,而不是expect变量。幸运的是,在这种情况下,
$
为空,因为您没有在后台通过
&

spawn
在shell中运行任何命令来创建新进程。您可以使用
pidof
命令跟踪后台进程的执行状态没有后台进程,它会终止rsync命令并生成下一个命令。我不理解您的代码,但如果没有生成,您的脚本将等待rsync完成后再处理下一个命令??Alecxs,它在EOD/expect中,因此需要与spawn一起运行。如果没有它,它将无法识别rysnc命令。