Bash umount 命令替换
Bash umount command substitution
我是 运行 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
将这些错误写入标准错误输出流。使用command-substitution$(..)
,只能捕获标准输出流。正确的解决方法是
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
部分的意思是,re-direct 将所有标准错误输出到标准输出并将它们组合到空设备中,以便它们在终端上可见 window.
我是 运行 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
将这些错误写入标准错误输出流。使用command-substitution$(..)
,只能捕获标准输出流。正确的解决方法是
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
部分的意思是,re-direct 将所有标准错误输出到标准输出并将它们组合到空设备中,以便它们在终端上可见 window.