在我正在处理的脚本中,必须使用变量 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:)
挂载点也可能包含“%”。