In einem Skript, an dem ich arbeite, muss eine variable UUID verwendet werden, um den aktuellen Einhängepunkt zu ermitteln, an den ein Gerät angeschlossen ist. Die Lösung, die ich gefunden habe, ist diese:
UUID='fc70ae3d-65e7-4437-a371-b237c8ca3f56h'
MNTPNT=$(lsblk -o +UUID | grep ${UUID} | tr -s ' ' | cut -d ' ' -f 7)
Beim Ausführen des Befehls speichert die Variable MNTPNT wie erwartet den aktuellen Einhängepunkt. Allerdings handelt es sich dabei um einen ziemlich umfangreichen Befehl, und ich kann den Gedanken nicht unterdrücken, dass es einen effizienteren Weg geben muss, dasselbe Ziel zu erreichen.
Ist es möglich, eine bessere Lösung zu finden? Es wäre hauptsächlich eine Frage der Optimierung. Vielen Dank im Voraus für alle Erkenntnisse.
Antwort1
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
So trimmen Sie Bind-Mounts:
awk -v dev="$(stat -Lc '%#t %#T' "/dev/disk/by-uuid/$UUID" | xargs printf '%d:%d')" '$3~dev&&$4=="/"{print$5}' /proc/self/mountinfo
Bedenken Sie, dass Geräte an mehreren Orten montiert werden können.
Die $(stat ... | xargs printf)
Monstrosität ist nur, weil stat(1)
nicht in der Lage ist, die großen, kleinen Zahlen inDezimal. Einfach die Ausgabe zu analysieren ls -Hl
wäre wahrscheinlich besser (und viel portabler).
Antwort2
df | grep "^$(readlink -f /dev/disk/by-uuid/$UUID) " |sed 's/^[^%]*% \+//'
Dies funktioniert auch, wenn Bind-Mounts von Unterverzeichnissen des Mounts vorhanden sind, was andere potenzielle Lösungen durcheinanderbringen könnte.
(Bearbeiten:)
Leerzeichen im Einhängepunkt zulassen.
(Edit2:)
Der Einhängepunkt kann auch "% " enthalten.