Вы можете узнать, на каком устройстве находится ваш файлdf
. Выберите выходные столбцы с опцией --output
. Обратите внимание, что df
выводит устройство, содержащее файловую систему. Если вы используете LVM , LUKS , mdraid и т. д., столбец source будет содержать путь к логическому устройству.
df --output=source $path |tail -1
Из столбца target можно получить точку подключения устройства:
df --output=target $path |tail -1
Чтобы получить путь относительно корня подключенного устройства, удалите точку подключения из начала пути. Использование оболочкирасширения параметра:
echo ${path#$(df $path --output=target |tail -1)}
Существует два разных подхода к отправке программой вывода, отдельного от ее стандартного вывода.
Один из них заключается в выводе в стандартную ошибку, и, как вы подозреваете, это может быть более распространено в средах стиля Unix -, чем в Windows; см. Относятся ли отчеты о ходе выполнения/информация к журналу на stderr или stdout? для некоторого обсуждения этого. Стандартная ошибка может быть перенаправлена; см. Что такое операторы управления и перенаправления оболочки?
Другой способ — выводить данные непосредственно на терминал, на котором запущена программа, если таковой имеется, с помощью /dev/tty
. См. . Как `less `берет данные из стандартного ввода, но при этом может читать команды от пользователя? для обсуждения этого (на входе, но аналогичные аспекты применимы к выходу ).
stderr и stdout — это способы по умолчанию для вывода текста на терминал.
Функция, использующая эхо и перенаправление для вывода как на стандартный вывод, так и на стандартный вывод:
function multioutput(){
>&2 echo 'stderr output'
echo 'stdout output'
}
Чтобы перенаправить ffmpeg stderr в stdout, чтобы они оба передавались в vlc stdin:
2>&1 ffmpeg -arg1 -arg2|vlc
Что vlc будет делать с выводом текста другими командами, я не понимаю...
Если бы ты объяснил свою цель, мне, возможно, повезло бы больше, пытаясь помочь тебе...