bash:忽略退出代码,但保留输出重定向

时间:2016-07-25 22:05:07

标签: bash diff

我有一个脚本,最后一行是:

git diff --no-index -- ./a.json ./b.json > ./a-b.diff

当文件不同时,

diff会返回1的退出代码,这会导致我的脚本报告错误。

如何忽略diff的退出代码,但保留内容的输出重定向到diff文件?

2 个答案:

答案 0 :(得分:5)

尝试:

git diff --no-index -- ./a.json ./b.json > ./a-b.diff || true

或者:

git diff --no-index -- ./a.json ./b.json > ./a-b.diff || :

或者,只要您不使用bash -e

git diff --no-index -- ./a.json ./b.json > ./a-b.diff
true

基本上,你可以在你知道的差异之后使用任何命令产生零(成功)退出代码。

答案 1 :(得分:1)

注意:在|| true之后必须使用git diff --no-index的原因是,您不能忽略其退出代码。
Git 2.25(2020年第一季度)对此进行了更清晰的说明。

请参见commit 0115e5dDenton Liu (Denton-L)(2019年10月29日)。
(由Junio C Hamano -- gitster --commit d4924ea中合并,2019年12月1日)

  

git-diff.txt:文档返回码--no-index

     

签名人:刘登顿

     

diff_no_index()内,我们有以下内容:

revs->diffopt.flags.exit_with_status = 1;

...

/*
 * The return code for --no-index imitates diff(1):
 * 0 = no changes, 1 = changes, else error
 */
return diff_result_code(&revs->diffopt, 0);
     

这意味着当git diff--no-index模式下运行时,将暗示 --exit-code
  但是,git diff中缺少此文档。

     

--exit-code文档中添加有关如何隐含--no-index的注释,以涵盖此文档盲点。