在diff
手冊頁,我發現這些出口值:diff的錯誤退出值是什麼?
0 No differences were found.
1 Differences were found.
>1 An error occurred.
是否有不同的錯誤不同的出口值超過1?
在diff
手冊頁,我發現這些出口值:diff的錯誤退出值是什麼?
0 No differences were found.
1 Differences were found.
>1 An error occurred.
是否有不同的錯誤不同的出口值超過1?
這取決於您的diff
命令。礦(GNU diffutils的3.0)說:
的
0
退出狀態意味着沒有分歧發現,1
意味着一些 差異被發現,並2
意味着麻煩。通常,不同的 二進制文件算作麻煩,但可以通過使用-a
或--text
選項或-q
或--brief
選項來更改這一點。
根據您使用的差異版本,可能有或者可能沒有不同的錯誤代碼。如果我沒有記錯,標準的BSD diff總是返回0,1或2的退出代碼。
但是,聯機幫助頁並未映射差異可能會執行的所有操作,但可以使用diff的文檔命令。在shell腳本中,我想知道文件是否匹配(exit = 0)或不匹配(exit = 1)。但是,在我的shell腳本中,我也想知道diff命令本身不起作用。
diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 0 ]
then
echo "$file1 and $file2 are the same file"
elif [ $error -eq 1 ]
echo "$file1 and $file2 differ"
else
echo "There was something wrong with the diff command"
fi
試想一下,如果有人告訴我,2意味着diff命令失敗,但diff命令的新版本則無法讀取一個文件(退出= 2),而遺漏的文件(出口加以區分= 3)。現在,想象一下,如果我沒有在diff命令的早期版本以下,但$file2
根本不存在:
diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 2 ]
then
echo "There was something wrong with the diff command"
elif [ $error -eq 1 ]
echo "$file1 and $file2 differ"
else
echo "$file1 and $file2 are the same file"
fi
在上面的代碼,我檢查的2和1的錯誤代碼,而不是3 。因此,我並沒有檢測到丟失的文件,而是假定文件匹配。
聯機幫助頁正在嘗試確保將來升級到操作系統不會導致大部分shell腳本突然失敗。這就是爲什麼有單獨的awk
和nawk
命令和單獨的grep
和egrep
命令。
*根據@chus的評論更新。
小心:在執行'if [$?'後更新$ $?' eq 0]',所以'elif'評估與差異輸出無關。 – chus
「根據您使用的'diff'的版本,[可能或可能]不會有不同的錯誤代碼。」 [POSIX'diff'在文件完全相同時退出,當它們不同時爲1,否則> 1](http://pubs.opengroup.org/onlinepubs/009696799/utilities/diff.html)。所以你不能假設2,但0和1是安全的。 –
@chus你說得對。我會更新我的答案。 –
在我的情況DIFF返回127,搜索它,發現它在tldp.org「退出代碼帶有特殊含義的」 illegal_command用$ PATH或錯字可能出現的問題
127「找不到命令」。
我用了一個不正確的路徑來比較。 :)
字體:tldp.org/LDP/abs/html/exitcodes.html
同意,我檢查了源,並且唯一的出口代碼EXIT_SUCCESS,EXIT_FAILURE(stdlib.h中都定義)和EXIT_TROUBLE ,在src/diffutils-3.0/system.h中定義 –
如果存在兩個(大)不同的二進制文件,'--text'選項會使我的STDOUT變得混亂。 –
我也在使用GNU diffutils,但引用了錯誤的手冊頁。 –