我尝试从 bash 脚本运行多个 rsync 命令,但只有第一个命令会触发。我尝试使用&&
和链接这些命令,;
但都不起作用。
#! /bin/bash
rsync -ahPr --delete-excluded --exclude='.DS_Store' --exclude=Caches/ --ignore-errors --stats --log-file=$LOGFILE --files-from=$FILESFROM ~/$SOURCE /Volumes/$DEST &&
rsync -avh --progress ~/.profile /Volumes/$DEST/_profile/profile &&
rsync -avh --progress ~/.gitconfig /Volumes/$DEST/_profile/gitconfig &&
rsync -avh --progress ~/.ssh/ /Volumes/$DEST/_profile/ssh/ &&
rsync -avh --progress ~/.vim/ /Volumes/$DEST/_profile/vim/
我将最后 4 个命令作为单独的命令执行,因为我正在动态重命名文件/目录 - 不确定是否有更好的方法来做到这一点?
我正在执行该脚本以bash -x myscript.sh
查看是否出现任何错误,但没有。
答案1
跑步
rsync && rsync
第一个 rsync 完成后将启动第二个 rsync。您需要
rsync&
解释:
a && b
a 运行,只有 a 成功竞争后,b 才会运行
a || b
a 运行,仅当 a 未成功完成时,b 才会运行
a; b
a 运行,无论成功与否,b 接下来运行
a& b
a 运行,被发送到后台。这相当于运行 a,输入 ctrl-Z 并运行 bg
因此,如果您希望程序同时运行,请将 && 替换为单个 &