2014-04-14 22 views
8

我犯了一個腳本,用於啓動並行rsync的過程中什麼時候能得到退出代碼:如何使用xargs的(平行)

#! /bin/bash 
LIST=$1 
DEST_DIR=$2 
RSYNC_OPTS=$3 
#echo "rsyncing From=$SRC_DIR To=$DEST_DIR RSYNC_OPTS=$RSYNC_OPTS" 
echo $LIST|xargs -n1 -d, echo|xargs -n1 -P 0 -I% rsync --rsync-path='sudo rsync' ${RSYNC_OPTS} % ${DEST_DIR} 

然後,我有問題,得到的rsync進程的退出狀態。我知道有可能獲得一個pipestatus數組,但我需要捕獲退出代碼以確定rsync是否成功完成。

任何人都知道嗎?

+0

您已經提到'$ PIPESTATUS':'$ {PIPESTATUS [2]}'將包含第二個'xargs'命令的退出狀態。如果退出狀態爲1-125的'rsync',這將是123(請參閱退出狀態部分:http://unixhelp.ed.ac.uk/CGI/man-cgi?xargs) –

+0

嗨Josh,謝謝你你的回覆。不過,我需要rysnc的退出代碼,而不是xargs退出代碼。像這樣:http://wpkg.org/Rsync_exit_codes – bLuEdDy

+0

不知道你可以使用像這樣的xargs獲得rsync的特定退出狀態,它將被xargs掩蓋。也許你可以通過'$ LIST'代替循環? –

回答

6

xargs的手冊頁顯示可能的退出狀態值,但它只能生成單個聚合的退出代碼,而不是每個運行的子代退出代碼。你可以嘗試下列選項之一:

  • 有xargs的產卵打印其退出代碼,並有父任務解析所有的退出代碼輸出,以確定每個rsync的退出代碼的過程。
  • 使用GNU parallel--joblog選項。這將創建一個文件,其中包含所有並行運行的命令以及其退出代碼和其他信息。在parallel出口後可以解析此文件,以確定哪些rsync命令失敗並顯示它們各自的錯誤代碼。