我使用rsync
没有主目录的帐户从一台服务器传输到另一台服务器:
rsync user@server:source target
Password:
Could not chdir to home directory /dev/null: Not a directory
bash: /dev/null/.bashrc: Ist kein
Verzeichnis
既然rsync
是成功的,我认为警告消息而不是错误说明原因的消息rsync
失败的。
有没有一种(简单的)方法可以rsync
告诉仅有的打印错误(如果确实有)失败的?
答案1
可以说是Could not chdir to home directory
消息是一个错误。
这不是一个函数,rsync
可以在类似的场景中看到(nohome
是我创建的没有主目录的帐户):
ssh nohome@localhost date
nohome@localhost's password:
Could not chdir to home directory /dev/null: Not a directory
Thu 1 Aug 07:02:05 UTC 2019
我找不到一种方法来抑制该消息(ssh -q
并且rsync -q
两者都没有相关效果)。
至于rsync
,它甚至看不到该消息。如果所有项目都成功传输,则退出状态rsync
为 SUCCESS (0) - 无论是否缺少主目录:
touch /tmp/x
rsync -av nohome@localhost:/tmp/x /tmp/y; echo Status=$?
nohome@localhost's password:
Could not chdir to home directory /dev/null: Not a directory
receiving incremental file list
x
sent 43 bytes received 83 bytes 50.40 bytes/sec
total size is 0 speedup is 0.00
Status=0
答案2
好吧,我自己刚刚找到了一个解决方案:
if ! output=$(rsync user@server:source target 2>&1); then
echo "$output"
fi
输出(stdout 和 stderr)保存在一个变量中,如果退出代码不为 0,则仅打印该变量。
不确定是否有更好的方法,但这绝对适合我。
背景
用户实际上是一个机器帐户,并且实际帐户rsync
是通过接受文件 ( /etc/machine.secret
) 作为密码的包装器脚本调用的。脚本本身是通过运行的,cron
所以我必须找到一种当且仅当出现问题时才能获取邮件的方法。
不执行任何操作意味着每次调用脚本时我都会收到“错误”邮件,执行相当简单的操作2>/dev/null
意味着我根本不会收到任何错误邮件,因此我必须找到一种方法来过滤掉该特定消息。
答案3
你尝试过-q
开关吗?它抑制非错误消息。
rsync -q user@server:source target