簡體   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