Bash umount命令替换

时间:2019-05-10 06:17:25

标签: bash umount

我正在运行RHEL 7并在此处进行bash。似乎命令替换不适用于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状态-如果有错误,我想设备必须很忙。

1 个答案:

答案 0 :(得分:2)

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

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

但是,您不必依赖详细信息,而可以依赖那些命令的退出代码,即先检查

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

以上版本安全地消除了这两个命令所产生的输出字符串,并且仅显示设备的安装状态。简而言之,2>&1 >/dev/null部分将所有标准错误重定向到标准输出,并将它们组合在一起放入空设备,以便它们在终端窗口中可见。