[英]How to get output status of sqlplus command from shell/shell script?
[英]How to get the output of git diff command in Shell Script
我正在尝试在具有相同文件的两个分支中执行 Git diff。 我想得到两个文件的区别。
我尝试将命令保存在变量中以获取结果。 示例:GIT_DIFF=$(git diff RB_202005:/test.txt RB_202006:/test.txt) 然后打印变量(示例:echo $GIT_DIFF)但没有返回任何内容。
因为你只对“无差异”、“差异”、“错误”的情况感兴趣,所以我会运行一个
git diff --exit-code --quiet .....
--exit-code
以普通diff
的方式设置退出代码。
--quiet
抑制 output。
如果退出代码为 0,则没有差异。
如果退出代码为 1,则说明存在差异。
如果退出代码是 2 或 128,则您有致命错误。
更新正如 OP 在评论中指出的那样,如果要比较的文件不存在, git-diff --exit-code
会产生状态代码 128。 根据手册页,它应该产生与标准diff
相同的退出代码,即 2。因此最好将任何大于 1 的退出代码视为标准错误。 这也会捕获git
本身未找到的情况(在这种情况下,shell 可能会报告退出代码 127)。
这并不总是适用于新的(Git 2.30,2021 年第一季度) git diff -I
,如果你想忽略差异模式。
当所有更改都匹配忽略的模式时,“ git diff -I<pattern> -exit-code
( man ) ”应该以 0 状态退出,但事实并非如此。
请参阅Junio C Hamano ( gitster
)的提交 50f0439 (2020 年 12 月 16 日)。
(由Junio C Hamano 合并gitster
提交 59fcf74,2020年 12 月 18 日)
diff
:--exit-code
和-I<pattern>
之间的正确交互
就像“
git diff -w --exit-code
” ( man )应该以 0 退出,当忽略空白差异导致不显示任何更改时,如果忽略某些更改与 “git diff -I<pattern> --exit-code
( man ) ”导致一个空补丁,我们应该以 0 退出。测试套件没有涵盖“
--exit-code
”和“-w
”之间的交互; 在为“--exit-code
”+“-I
I”添加新测试时添加一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.