我想检查 USB 是否忙并将结果存储在变量中:
$ foo=$(umount /dev/sdb1)
$ umount: /path/mounted: target is busy.
但是当我想打印时$foo
,我得到一个空变量
$ echo $foo
$
我的最终目标是卸载 USB。如果目标正忙,则使用 向用户发出警告whiptail
。所以:
$ [[ -z $foo ]] || whiptail --msbox "Cancel the operation that is maintaining your USB busy" 0 0
是否可以将错误存储在target is busy
变量上,还是应该使用另一种技术?
程序通常将错误消息写入“标准错误”I/O 流;简称“stderr”。如果您搜索该词,您将获得数百万条结果;简短的解释是 stderr 存在,因此当“标准输出”(“stdout”)被重定向时,错误消息可以并且将会出现在屏幕上,就像在一个假设的命令中一样
你可以看到这种情况发生;即使您试图在变量中捕获它,错误消息也会出现在您的屏幕上。
同样简短的答案是用于
2>&1
将 stderr 流合并到 stdout 流中,所以将捕获变量中的错误消息。
jordanm 在评论中建议的另一种方法是查看退出状态。这个主题的变化包括: