如何在POSIX shell中测试命令输出是否为非空?

Pet*_*dis 7 unix testing bash shell

如何有效地检查任意命令是否在POSIX shell中产生任何输出?(比方说吧git ls-files --killed.)

有三种显而易见的方式,但每种方式对我来说都是丑陋或邪恶的:

  1. [-n"$(git ls-files --killed)"] - 命令的完整输出必须在内存中捕获并传递给测试(至少希望是内置的)
  2. ["$(git ls-files --killed | wc -c)" - GB 0] - 涉及两个fork-execs
  3. TMP = $(临时文件); git ls-files --killed>"$ tempfile"; [-s"$ tempfile"] && ...; rm"$ tempfile" - 一个中间临时文件(同样捕获所有输出)也是必需的

Gur*_*uru 4

您还可以检查命令的退出状态。通常,如果命令成功运行,则返回退出状态 0。

git ls-files --killed > /dev/null
if [ $? -eq 0 ]
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想依赖命令的输出,则可以将“ head -1”与第一个选项一起使用,因为无论如何,除了知道结果之外,您似乎没有对命令输出进行任何处理。