Bash umount 命令替换



我正在运行RHEL 7并在这里猛击。似乎命令替换对 umount 命令不起作用。但是,对于其他命令,它确实像往常一样工作。例如:

[root@localhost ~]# msg=$(umount /u01)
umount: /u01: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@localhost ~]# echo "$msg"
- nothing here -

[root@localhost ~]# msg=$(mountpoint /u01)
[root@localhost ~]# echo "$msg"
/u01 is a mountpoint

我可能能做的是先使用挂载点,如果挂载点存在,则再卸载。然后检查卸载状态 - 如果出现错误,我想设备一定很忙。

可能是将这些错误写入标准错误输出流umount。使用命令替换$(..),只能捕获标准输出流。正确的解决方法是

msg="$(umount /u01 2>&1)"

但是,您可以依靠这些命令的退出代码,而不是依赖详细信息,即第一次检查

if mountpoint /u01 2>&1 > /dev/null; then
if ! umount /u01 2>&1 > /dev/null; then
printf '%sn' "/u01 device must be busy"
else
printf '%sn' "/u01 device is mounted"
fi
fi

上述版本安全地取消了这两个命令生成的输出字符串,并且仅打印设备的挂载状态。简而言之,2>&1 >/dev/null部分意味着将所有标准误差重定向到标准输出,并将它们组合到空设备,以便它们在终端窗口中可见。

相关内容

  • 没有找到相关文章

最新更新