在我正在編寫的腳本中,必須使用變數 UUID 來取得裝置所連接的目前安裝點。我想出的解決方案是這樣的:
UUID='fc70ae3d-65e7-4437-a371-b237c8ca3f56h'
MNTPNT=$(lsblk -o +UUID | grep ${UUID} | tr -s ' ' | cut -d ' ' -f 7)
執行指令後,變數 MNTPNT 會依預期儲存目前掛載點。不過,這是一個相當廣泛的命令,我忍不住想一定有更有效的方法來實現相同的目標。
是否有可能提出更好的解決方案?這主要是一個優化問題。預先感謝您的任何見解。
答案1
findmnt -noTARGET "/dev/disk/by-uuid/$UUID"
grep "$(stat -Lc '%#t %#T' "/dev/disk/by-uuid/$UUID" | xargs printf '%d:%d')" /proc/self/mountinfo
awk -v dev="$(stat -Lc '%#t %#T' "/dev/disk/by-uuid/$UUID" | xargs printf '%d:%d')" '$3~dev{print$5}' /proc/self/mountinfo
為了修剪綁定安裝:
awk -v dev="$(stat -Lc '%#t %#T' "/dev/disk/by-uuid/$UUID" | xargs printf '%d:%d')" '$3~dev&&$4=="/"{print$5}' /proc/self/mountinfo
請記住,設備可以安裝在多個位置。
可怕$(stat ... | xargs printf)
的只是因為stat(1)
無法印出主要的、次要的數字小數。僅解析 的輸出ls -Hl
可能會更好(並且更便攜)。
答案2
df | grep "^$(readlink -f /dev/disk/by-uuid/$UUID) " |sed 's/^[^%]*% \+//'
當掛載子目錄中存在綁定掛載時,這也適用,這可能會混淆其他一些潛在的解決方案。
(編輯:)
在安裝點中允許空格。
(編按2:)
掛載點也可能包含「%」。