私が取り組んでいるスクリプトでは、デバイスが接続されている現在のマウントポイントを取得するために変数UUIDを使用する必要があります。私が思いついた解決策はこれです:
UUID='fc70ae3d-65e7-4437-a371-b237c8ca3f56h'
MNTPNT=$(lsblk -o +UUID | grep ${UUID} | tr -s ' ' | cut -d ' ' -f 7)
コマンドを実行すると、変数MNTPNTは現在のマウントポイントを期待どおりに格納します。しかし、それはかなり広範なコマンドであり、同じ目的を達成するためのより効率的な方法が必要だと考えざるを得ません。
より良い解決策を考え出すことは可能ですか?ほとんどの場合、最適化の問題になります。洞察を事前に感謝します。
_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)
monstruosityは、stat(1)
がdecimalのメジャーとマイナーの数値を出力できないためです。 _ls -Hl
_の出力を解析するだけで、おそらくより良い(そしてはるかに移植性が高い)でしょう。
df | grep "^$(readlink -f /dev/disk/by-uuid/$UUID) " |sed 's/^[^%]*% \+//'
これは、バインドマウントがマウントのサブディレクトリに存在する場合にも機能し、他の潜在的なソリューションを混乱させる可能性があります。
(編集:)
マウントポイントにスペースを許可します。
(編集2 :)
マウントポイントには「%」も含まれる場合があります。