如何在POSIX shell中高效地检查任意命令是否产生了任何输出? (比如说
git ls-files --killed
)。有三种明显的方法,但每一种方法看起来都很丑陋或邪恶:
- [ -n "$(git ls-files --killed)" ] - 完整的命令输出必须被捕获到内存中并传递给test(至少希望是一个内置命令)。
- [ "$(git ls-files --killed | wc -c)" -gt 0 ] - 涉及两个分叉执行器。
- TMP=$(tempfile); git ls-files --killed >"$tempfile"; [ -s "$tempfile" ] && ...; rm "$tempfile" - 需要一个中间临时文件(再次捕获所有输出)。