我被困在第一个障碍了!
我想从 bash 脚本运行几个命令。首先像这样 rsync 一些目录:
rsync -e ssh -az [email protected]:/home /location/of/local/folder
然后像这样将文件压缩并复制到其他地方:
cd /location/of/local/folder
tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz home
我希望这是有道理的。
问题是显然我希望 rsync 在目录被 tar 之前完成。那么,我可以使用一些代码来确保 rsync 在运行tar
命令之前已完成吗?
例如(伪代码)
rsync
while(is syncing){
sleep 10
}
tar
或者我的.sh
脚本只会在第一行完成并退出后运行下一行?
答案1
shell 脚本中的命令是按顺序执行的。如果您的第一个命令是,则下一个命令在完成rsync
之前不会执行。rsync
您想要确保的是rsync
在继续执行下一个命令之前成功完成。
这不是最优雅的解决方案,但却是最容易实现的。
rsync -e ssh -az [email protected]:/home /location/of/local/folder &&\
tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz /location/of/local/folder
请记住,这仅在退出状态为 时才rsync
有效0
。任何其他退出状态和命令 2 将不会运行。
AND 和 OR 列表是由 && 分隔的多个管道之一的序列 和||分别控制运算符。 AND 和 OR 列表被执行 具有左结合性。 AND 列表的形式为 命令1 && 命令2 当且仅当 command1 返回退出状态为零时,command2 才会执行。
如果您根据rsync
退出值执行不同的操作,则可以为脚本添加更多智能。
#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin
rsync -e ssh -az [email protected]:/home /location/of/local/folder
if [ $? != "0" ]
then
echo "There was a problem"
else
tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz /location/of/local/folder
fi