2013-10-16 185 views
0

我正在搞rsync腳本來同步一些東西到我的手機。我試圖編寫一個if語句來決定在命令完成時我在電子郵件中收到哪條消息。出於某種原因,無論命令如何退出,我都會收到兩封電子郵件。爲什麼這個bash「if」語句執行兩條語句

success_message=echo "Podcasts are synced." | mail -s "Your podcasts have been synced to your phone." $email_address 
fail_message=echo "Your phone did not sync." | mail -s "For some reason, your podcasts did not sync today." $email_address 

rsync --log-file=/home/jake/logs/rsync.log -avzu $local_directory $remote_directory 
if [ $? -ne "0" ]; 
then 
    $fail_message 
else 
    $success_message 
fi 
+0

更好適應上unix.stackexchange.com? –

+1

這不是你如何有條件地運行命令。完全一樣。 –

+1

甚至在進入rsync之前,您的'mail'命令正在執行。 – lurker

回答

1

由於第一條指令在管道處結束,因此該行發送消息。

success_message=echo "Podcasts are synced." | mail -s "Your podcasts have been synced to your phone." $email_address 
1

嘗試將這些命令放入shell變量中,然後每次稍後參考一次變量是絕對沒有好處的。只要把這些命令在if聲明:

rsync --log-file=/home/jake/logs/rsync.log -avzu $local_directory $remote_directory 

if [ $? -ne "0" ]; 
then 
    echo "Podcasts are synced." | mail -s "Your podcasts have been synced to your phone." $email_address 
else 
    echo "Your phone did not sync." | mail -s "For some reason, your podcasts did not sync today." $email_address 
fi 
+0

感謝所有的答覆。我只是從電子郵件中刪除了變量,這使得它可以正常工作。再次感謝。 – user2882212

4

此行

success_message=echo "Podcasts are synced." | mail ... 

嘗試執行命名命令 「播客同步。」 (不包括引號,但包含它們之間的所有內容),並將其輸出傳送給「郵件」命令。令牌「success_message = echo」導致在「Podcasts are synced」的環境中設置名爲「success_message」的環境變量。命令,值爲「echo」。

重要的是,即使在管道的左側的事情失敗(因爲你沒有一個名爲/usr/bin/Podcasts are synced.,毫無疑問程序),執行右邊的mail命令。由於有兩條這樣的線,所以兩條命令都運行。

下面是如何做你試圖做:

send_success_message() { 
    echo "Podcasts are synced." | 
     mail -s "Your podcasts have been synced to your phone." "$1" 
} 
send_fail_message() { 
    echo "Your phone did not sync." | 
     mail -s "For some reason, your podcasts did not sync today." "$1" 
} 

if rsync --log-file=/home/jake/logs/rsync.log -avzu \ 
     "$local_directory" "$remote_directory" 
then send_success_message "$email_address" 
else send_fail_message "$email_address" 
fi 
+0

+1用於使用參數=) – paddy

+0

這是一個很好的例子!謝謝! – maniat1k