如何使grep命令无论是否匹配内容都返回0状态码?
让grep无论是否匹配都返回0状态码的方法
问题场景
假设我们有文件test.file,内容如下:
$ cat test.file a b c
当grep匹配到内容时,退出码为0:
$ grep a test.file a $ echo $? 0
当grep未匹配到内容时,退出码为1:
$ grep x test.file $ echo $? 1
这个1的退出码会导致后续管道命令或脚本执行中断,需要让grep无论是否匹配都返回一致的0状态码。
解决方法
方法1:用
|| true强制返回0
在grep命令后追加|| true,利用shell的逻辑或特性:如果grep返回非0(未匹配内容),则执行true命令(该命令始终返回0),最终整个命令的退出码为0,同时会保留grep的输出结果。示例:
# 未匹配内容的情况 $ grep x test.file || true $ echo $? 0 # 匹配内容的情况 $ grep a test.file || true a $ echo $? 0嫌
true啰嗦的话,也可以用shell的空命令:替代,效果完全相同:grep x test.file || :方法2:管道中使用(避免中断后续命令)
如果是在管道链中使用,比如some_command | grep pattern | next_command,需要把grep和|| true放在子shell中,确保管道后续的命令能正常执行:some_command | (grep pattern || true) | next_command方法3:脚本中强制设置退出码
如果是在shell脚本里,执行完grep后直接强制设置退出码为0即可:grep pattern test.file exit 0注意:这个方法会直接让脚本退出并返回0,仅适合脚本末尾的场景,若脚本后续还有其他逻辑,请勿使用。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

