2013-10-15 154 views
1

我创建了一个小的rsync脚本来同步我的播客。我已经配置脚本在完成时给我发电子邮件。我正在尝试测试rsync的退出状态以决定发送哪条消息。这里是块:命令退出状态的Bash测试

my_command= rsync --log-file=/home/jake/logs/rsync.log -avzu $local_directory $remote_directory 
if [ $? -eq 0 ]; then 
    $mail_expression_success 
else 
    $mail_expression_fail 
fi 

无论命令如何完成,我得到的消息包含在第一个变量。 $mail_expression_success

+2

你在哪里执行rsync命令?看起来你只是把它分配给一个总是成功的变量。 – vidit

+1

你为什么认为rsync失败?你在这里发布的代码看起来很好(但有点奇怪,因为空字符串赋给'my_command'没有用)。 –

+0

有两个问题:如果'my_command =“rsync ...”'是有意的,那么它确实是一个总是成功的变量赋值,尽管实际上从未调用过rsync。如果目的是通过'my_command = $(rsync ...)'来获取'rsync'的输出,那么会调用rsync,但不是将输出分配给'my_command',而是简单地运行'rsync'一个环境,其中'my_command'为空值(并被'rsync'忽略)。就后一种情况而言,正如William Pursell所指出的那样,“rsync”确实成功了。 – chepner

回答

0

=后面不能有空格。如果你把空间,你的价值没有正确分配。您最好不要将输出分配到f,只需检查$?

2

这只是为了更好地做这样的事情:

if rsync .... 
then 
     echo Yay 
else 
     echo Oh noes 
fi 
1

你想要做的是这样的:

my_command=$(rsync --log-file=/home/jake/logs/rsync.log -avzu $local_directory $remote_directory) 
if [ $? -eq 0 ]; then 
    $mail_expression_success 
else 
    $mail_expression_fail 
fi 
+0

假设OP有意做这样的任务是合理的,但是发布的问题工作得很好,并且像这个解决方案一样对'$?'进行相同的赋值,所以发生了其他事情。 –

相关问题