Как программа выводит данные на терминал, если стандартный вывод передается по конвейеру?

Вы можете узнать, на каком устройстве находится ваш файл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)}

0
07.09.2020, 16:58
2 ответа

Существует два разных подхода к отправке программой вывода, отдельного от ее стандартного вывода.

Один из них заключается в выводе в стандартную ошибку, и, как вы подозреваете, это может быть более распространено в средах стиля Unix -, чем в Windows; см. Относятся ли отчеты о ходе выполнения/информация к журналу на stderr или stdout? для некоторого обсуждения этого. Стандартная ошибка может быть перенаправлена; см. Что такое операторы управления и перенаправления оболочки?

Другой способ — выводить данные непосредственно на терминал, на котором запущена программа, если таковой имеется, с помощью /dev/tty. См. . Как `less `берет данные из стандартного ввода, но при этом может читать команды от пользователя? для обсуждения этого (на входе, но аналогичные аспекты применимы к выходу ).

5
18.03.2021, 23:06

stderr и stdout — это способы по умолчанию для вывода текста на терминал.

Функция, использующая эхо и перенаправление для вывода как на стандартный вывод, так и на стандартный вывод:

function multioutput(){
 >&2 echo 'stderr output'
 echo 'stdout output'
}

Чтобы перенаправить ffmpeg stderr в stdout, чтобы они оба передавались в vlc stdin:

2>&1 ffmpeg -arg1 -arg2|vlc

Что vlc будет делать с выводом текста другими командами, я не понимаю...

Если бы ты объяснил свою цель, мне, возможно, повезло бы больше, пытаясь помочь тебе...

0
18.03.2021, 23:06

Теги

Похожие вопросы