Umount:目标正忙于变量

Umount:目标正忙于变量

我想检查 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在变量上,或者我应该使用另一种技术?

答案1

程序通常将错误消息写入“标准错误”I/O 流;简称“stderr”。如果您搜索该词,您将获得数百万个结果;简短的解释是 stderr 存在,因此当“标准输出”(“stdout”)重定向时,错误消息可以并且将会显示在屏幕上,就像在假设的命令中一样

umount /dev/sdb1 > um.result.txt

你可以看到这种情况的发生;即使您尝试将错误消息捕获到变量中,该错误消息也会出现在您的屏幕上。

同样简短的答案是使用2>&1 将 stderr 流合并到 stdout 流中,因此

foo=$(umount /dev/sdb1 2>&1)

将捕获变量中的错误消息。

另一种方法,正如乔丹在评论中所建议的,就是查看退出状态。此主题的变体包括:

卸载/dev/sdb1 ||  向用户投诉
如果 !卸载/dev/sdb1
然后
    向用户投诉
umount /dev/sdb1 2> /dev/null ||  向用户投诉
foo=$(umount /dev/sdb1 2>&1) ||  向用户投诉使用“$foo”

相关内容