Em um script no qual estou trabalhando, uma variável UUID deve ser usada para obter o ponto de montagem atual ao qual um dispositivo está conectado. A solução que encontrei é esta:
UUID='fc70ae3d-65e7-4437-a371-b237c8ca3f56h'
MNTPNT=$(lsblk -o +UUID | grep ${UUID} | tr -s ' ' | cut -d ' ' -f 7)
Ao executar o comando, a variável MNTPNT armazena o ponto de montagem atual conforme esperado. No entanto, é um comando bastante extenso e não posso deixar de pensar que deve haver uma forma mais eficiente de atingir o mesmo objectivo.
É possível encontrar uma solução melhor? Seria uma questão de otimização, principalmente. Agradecemos antecipadamente por qualquer insight.
Responder1
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
Para aparar montagens de ligação:
awk -v dev="$(stat -Lc '%#t %#T' "/dev/disk/by-uuid/$UUID" | xargs printf '%d:%d')" '$3~dev&&$4=="/"{print$5}' /proc/self/mountinfo
Lembre-se de que os dispositivos podem ser montados em vários locais.
A $(stat ... | xargs printf)
monstruosidade ocorre apenas porque stat(1)
não é capaz de imprimir os números maiores e menores emdecimal. Apenas analisar a saída ls -Hl
provavelmente seria melhor (e muito mais portátil).
Responder2
df | grep "^$(readlink -f /dev/disk/by-uuid/$UUID) " |sed 's/^[^%]*% \+//'
Isso funciona também quando montagens de ligação estão presentes em subdiretórios da montagem, o que pode confundir algumas outras soluções potenciais.
(Editar:)
Permita espaços no ponto de montagem.
(Edit2:)
O ponto de montagem também pode conter "%".