簡體   English   中英

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狀態-如果有錯誤,我想設備必須很忙。

可能是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM