Cha*_*art 13 linux bash shell mount path
以下非常不健壮的shell代码将给出挂载点$path:
(for i in $(df|cut -c 63-99); do case $path in $i*) echo $i;; esac; done) | tail -n 1
在shell中有更好的方法吗?
后记
这个脚本非常糟糕,但具有可在我的系统上运行的兑换质量.请注意,几个挂载点可能是前缀$path.
示例 在Linux系统上:
cas@txtproof:~$ path=/sys/block/hda1 cas@txtproof:~$ for i in $(df -a|cut -c 57-99); do case $path in $i*) echo $i;; esac; done| tail -1 /sys
在Mac OSX系统上
cas local$ path=/dev/fd/0 cas local$ for i in $(df -a|cut -c 63-99); do case $path in $i*) echo $i;; esac; done| tail -1 /dev
注意需要改变切割参数,因为df的输出方式不同; 使用awk解决了这个问题,但即使是awk也是不可移植的,给定了结果格式化df返回的各种实现.
回答 看起来像是表格输出是shell中唯一的方法,但是
df -P "$path" | tail -1 | awk '{ print $NF}'
基于ghostdog74的答案,对我所拥有的是一个很大的改进.注意两个新问题:首先,df $path坚持$path命名现有文件,我上面的脚本并不关心; 其次,不用担心解除引用符号链接.如果您的挂载点中包含空格,则不起作用,如果其中包含可移动介质,其卷名称中包含空格,则会出现这种情况.
编写Python代码来正确完成工作并不困难.
Jes*_*erE 17
df 将路径作为参数,所以这样的东西应该相当健壮;
df "$path" | tail -1 | awk '{ print $6 }'
Run Code Online (Sandbox Code Playgroud)
Dou*_*der 14
理论上stat会告诉你文件所在的设备,并且应该有一些方法将设备映射到安装点.
例如,在linux上,这应该工作:
stat -c '%m' $path
Run Code Online (Sandbox Code Playgroud)
一直是使用程序格式化选项的粉丝,因为它比操作输出更强大(例如,如果挂载点有空格).GNU df允许以下内容:
df --output=target "$path" | tail -1
Run Code Online (Sandbox Code Playgroud)
不幸的是,我无法看到阻止打印标题的选项,因此仍需要尾部.