2016-08-09 24 views
1

我想在bash上运行一个显示git status的输出的命令,但前提是有一些有趣的事情。换句话说:如果一切都很好,我不希望命令打印任何东西。基本上我可以通过运行实现这一点:在bash中转发退出代码如果

if [[ $(git status -s) ]]; then git status; fi 

这里的技巧是,如果有一些有趣的-s标志只输出任何东西,所以它不正是我想要:-)

唯一的缺点是如果我在不是git目录的目录中运行它,我不会得到不等于0的退出代码。如果我直接运行git statusgit status -s,则两者均会以退出代码128失败。但只要我在if内这样做,退出代码是0

如何增强我的脚本以便退出代码将被转发?

+0

什么的退出代码'git的状态-s'如果什么有趣的发生给? – 123

+0

它返回'0',但输出本身是空的。 –

回答

1

做内[[过退出状态检查:

if [[ -n $(git status -s 2>/dev/null) ]]; then git status; fi 
+0

或只是'如果git status -s 2>/dev/null;然后git status' – 123

+0

@ 123这是计划,但OP想要检查输出字符串.. – heemayl

+0

即使没有任何东西,git status -s返回true感兴趣的事情发生了吗? – 123

1

只是重定向到/ dev/null,并且检查输出为空:

[ -n "$(git status -s 2>/dev/null)" ] && git status 

这将执行git statusgit status -s命令成功运行且其输出不为空,按man test

-n STRING 
      the length of STRING is nonzero 
+0

不幸的是,这不起作用:它正确地转发退出代码,但如果没有什么有趣的东西可以看到,它不会压缩输出。 –

+0

@GoloRoden你是对的,我正在更新。 – fedorqui

1

您可以git的情况下,使用rev-parse的目录中没有:

git rev-parse 2>/dev/null && { git status -s || git status; }