如何只在“git diff”有输出的情况下运行另一个git命令?

hrysbysz  于 2022-12-17  发布在  Git
关注(0)|答案(3)|浏览(137)

如何在bash或任何其他类似bash的shell中仅在另一个命令输出某些内容时才运行该命令?
我正在开发一个API来更新一个工具该高速缓存存储,并将更新后的缓存提交到GitHub,我想做的是,在重建缓存之后,我想检查git diff HEAD ./path/to/cache是否输出了一些东西,如果输出了,我想运行git add ./path/to/cache
不幸的是,这不起作用:

git diff HEAD ./path/to/cache && git add ./path/to/cache

我想是因为第一个命令没有返回false或者exit,而是输出一个空字符串或者什么都不输出。那么,在bash中实现这个的正确方法是什么呢?

yvgpqqbh

yvgpqqbh1#

使用--exit-code选项,如果没有差异,则git diff退出,返回0,否则返回1,然后可以忽略输出。

git diff --exit-code HEAD ./path/to/cache || git add ./path/to/cache
olqngx59

olqngx592#

@chepner贴出的答案对于我的用例来说绝对是最好的,但我的问题本来是针对任何用例的,如果想让任何其他命令都实现同样的行为,可以使用grep命令检查第一个命令是否输出了任何东西。

git diff HEAD ./path/to/cache | grep -q . && git add ./path/to/cache
ao218c7q

ao218c7q3#

[ -z $(git diff HEAD ./path/to/cache) ] || git add ./path/to/cache
# [ EXPRESSION ], -z the length of STRING is zero.
# || If no, execute subsequent shell

相关问题