用于检查路径中带有空格的设备或文件是否已挂载的 shell 代码

用于检查路径中带有空格的设备或文件是否已挂载的 shell 代码

我发现的搜索结果要么是关于确定文件系统是否安装在特定路径上,要么是特定路径是否被用作安装点。我正在寻找一种方法来确定是否安装了给定的设备或文件(即文件系统映像)根本不。该解决方案应该能够处理设备/文件路径中的空格。

我在搜索结果中看到的这些不是解决方案:

  • mountpoint -q "${PATH}"仅测试是否${PATH}是挂载点。
  • 应用于grep -q "${PATH}"某些输出可能不起作用,因为${PATH}其中可能有空格,并且像这样的命令的输出mount中有空格。

此外,它应该返回文件/设备安装到的位置。

答案1

您可以查阅该文件/proc/self/mounts(或/proc/mounts),在此文件中空间使用 \040(八进制值)进行编码:

例如,/dev/sda1安装在/mnt/mount sda1

grep '/dev/sda1' /proc/mounts | cut -d ' ' -f 2

返回:/mnt/mount\040sda1

grep "$(echo '/mnt/mount sda1' | sed 's/ /\\\\040/g')" /proc/mounts | cut -d ' ' -f 1

返回:/dev/sda1

答案2

/etc/mtab、/proc/mounts等不显示源文件路径。

命令执行并格式化其输出。

所以你可以尝试:

mount | egrep "${file_path=} on /"

export file_path="/home/kalavan/Downloads/debian 6.0.10-amd64-netinst.iso"

mount | egrep "${file_path=} on /"
/home/kalavan/Downloads/debian 6.0.10-amd64-netinst.iso on /mnt/pc75 type iso9660 (ro,relatime)

mount | grep debian               
/home/kalavan/Downloads/debian 6.0.10-amd64-netinst.iso on /mnt/pc75 type iso9660 (ro,relatime)
/home/kalavan/Downloads/debian 6.0.10-amd64-netinst.iso_somethingelse on /mnt/projekte type iso9660 (ro,relatime)

那么犯错误的风险就小得多。人们还可以尝试将其余行模式与正则表达式进行匹配。

相关内容