簡體   English   中英

Bash 腳本 - 卸載一個設備,但如果沒有安裝它不會失敗?

[英]Bash Script - umount a device, but don't fail if it's not mounted?

我正在編寫一個 bash 腳本,並且設置了errexit ,這樣如果任何命令沒有返回 0 退出代碼,即如果任何命令沒有成功完成,腳本就會終止。 這是為了確保我的 bash 腳本是健壯的。

我必須掛載一些文件系統,復制一些文件,然后卸載它。 我在開始時放置了一個umount /mnt/temp ,這樣它會在做任何事情之前卸載它。 但是,如果未安裝,則 umount 將失敗並停止我的腳本。

是否可以執行umount --dont-fail-if-not-mounted /mnt/temp 如果未安裝設備,它會返回 0 嗎? 喜歡rm -f嗎?

忽略返回代碼的標准技巧是將命令包裝在一個始終計算成功的布爾表達式中:

umount .... || /bin/true

假設您的umount在未安裝設備時返回 1,您可以這樣做:

umount … || [ $? -eq 1 ]

如果umount返回 0 或 1(即卸載成功或設備未安裝),bash 將假設沒有錯誤,但如果返回任何其他代碼(例如,您沒有卸載設備的權限),則將停止腳本。

忽略退出代碼並不是真正安全的,因為它不會區分已經卸載的東西和卸載失敗的資源。

我建議測試該路徑是否使用mountpoint ,當且僅當給定路徑是掛載資源時返回 0。

如果未掛載給定路徑,此腳本將以 0 退出,否則它會給出umount的退出代碼。

#!/bin/sh

if mountpoint -q "$1"; then
  umount "$1"
fi

你也可以作為一個班輪來做。

! mountpoint -q "$mymount" || umount "$mymount"

我只是發現“:”更有用,想要一個類似的解決方案,但讓腳本知道發生了什么。

umount ...... || { echo "umount failed but not to worry" ; : ; } 

這會返回 true 和消息,盡管 umount 失敗了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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