我在bash shell上工作,在编写脚本时我想改变命令的输出和错误提示。
例如,命令是
sudo apt install nano
我想输出
Installing nano
命令成功完成后,
Nano Installed
除此以外
Error occurred
在这样做的时候我尝试了
printf "\n Installing Nano"
{
sudo apt install nano -y
} &> /dev/null
printf "\r Nano Installed \n"
但对于不同的退出状态,它不会显示不同的值
我认为您正在混淆两种不同的东西,成功与失败以及标准输出与标准错误。stdout与stderr的区别实际上与命令的“正常”输出(stdout)与状态消息(stderr,包括错误消息,成功消息,状态消息等)有关。在您的情况下,您要打印的所有内容都应归入stderr,而不是stdout。
成功与失败是另一个问题,通常可以通过命令的退出状态来检测。看起来有些奇怪,但是检查命令退出状态的标准方法是将其用作if
语句的条件,如下所示:
printf "\n Installing Nano" >&2
if sudo apt install nano -y &> /dev/null; then
# The "then" branch runs if the condition succeeds
printf "\r Nano Installed \n" >&2
else
# The "else" branch runs if the condition fails
printf "\r Error Occured \n" >&2
fi
(在某些情况下使用&&
而||
不是if ... then ... else
会引起混乱和奇怪的问题;我不建议这样做。)
注意:>&2
将输出重定向到stderr,因此以上内容将所有消息发送到stderr。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句