Следующий, очень ненадежный код оболочки даст точку монтирования $path
:
(for i in $(df|cut -c 63-99); do case $path in $i*) echo $i;; esac; done) | tail -n 1
Есть ли лучший способ сделать это в оболочке?
Postscript
Этот script действительно ужасен, но имеет качество погашения, которое он работает в моих системах. Обратите внимание, что несколько точек монтирования могут быть префиксами $path
.
<сильные > Примеры В системе Linux:
[email protected]:~$ path=/sys/block/hda1 [email protected]:~$ 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.
Ответ Похоже, что табулярный вывод munging является единственным способом внутри оболочки, но
df -P "$path" | tail -1 | awk '{ print $NF}'
основанный на ответе ghostdog74, является большим улучшением в отношении того, что у меня было. Обратите внимание на две новые проблемы: во-первых, df $path
настаивает на том, что $path
называет существующий файл, script, который у меня был выше, не волнует; во-вторых, не стоит беспокоиться о разыменовании символических ссылок. Это не работает, если у вас есть точки монтирования с пробелами в них, что происходит, если у вас есть съемные носители с пробелами в их именах томов.
Не сложно написать код Python для правильной работы.