[英]How to test whether a command output is non-empty in POSIX shell?
如何有效地檢查任意命令是否在POSIX shell中產生任何輸出? (比方說git ls-files --killed
。)
有三種顯而易見的方式,但每種方式對我來說都是丑陋或邪惡的:
您也可以檢查命令的退出狀態。 通常,如果成功運行命令,則返回退出狀態0。
git ls-files --killed > /dev/null
if [ $? -eq 0 ]
或者,如果您只想依賴命令的輸出,您可以使用“ head -1
”和第一個選項,因為無論如何它看起來除了知道結果之外,您沒有使用命令輸出進行任何處理。
我的首選解決方案使用POSIX shell內置read
if git ls-files --killed | read REPLY; then
echo "Some output"
else
echo "No output or git failed"
fi
read
嘗試從stdin(和變量REPLY
)讀取一行,如果成功則返回0,如果失敗則返回正退出代碼。 管道的其余部分未讀取。 僅在bash中,如果省略則REPLY
是默認名稱,因此read REPLY
可以縮短為read
。
這種方法的潛在缺點是不檢查所討論程序的退出代碼(在您的示例中為git)。
您可能認為此解決方案與其他解決方案一樣,但我認為它使用的內存少於其他解決方案(我不是shell腳本效率方面的專家)。
代碼只是bash:
z=0
while read -r -n1 char; do
z=1
break
done < <(git ls-files --killed)
[ $z != 0 ]
它使用臨時變量而不是臨時文件,我認為read一次只能運行一個char,但git ls-files命令仍然可以完全執行。
它可能不會那么難看,但我認為它可能至少更有效率。
因為你提到POSIX,我會推薦你這個答案
我會使用/ usr / bin / test,因為它在POSIX系統上是必需的。
/usr/bin/test -n "$(git ls-files --killed)"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.