[英]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狀態-如果有錯誤,我想設備必須很忙。
可能是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
部分將所有標准錯誤重定向到標准輸出,並將它們組合到空設備中,以便它們在終端窗口中可見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.