выходной терминал перенаправить в zenity

Давайте объясним вам мое сомнение.
Все мы знаем, что >& является синтаксисом оболочки для «сворачивания файлового дескриптора в другой».
Таким образом, 2>&1 означает, что я хочу перенаправить stderr на стандартный ввод, это просто и понятно:)
Вещь, которую я не понимаю, это (давайте объясним это на примере)

[ 110]

Приведенный выше код не работает ... но он работает отлично:

ncftpput -u $user -p $pass $host $remote_dir $local_file 2>&1 | zenity --text-info --title "Putting files..." --width 600 --height 300

Я не понимаю, почему, если я поставлю 2>&1 перенаправление на работу zenity и если я не не пишите 2>&1 перенаправление не работает. Почему?

0
задан 17 October 2011 в 17:04

1 ответ

По соглашению приложения выводят два файловых дескриптора: 1 (stdout) и 2 (stderr). Трубчатый элемент оболочки перенаправляет stdout одного процесса на stdin другого. Таким образом, приложения могут отделять сообщения об ошибках или состояния от их нормального вывода и все еще быть пригодными для использования при передаче своих выходных данных.

Похоже, что вывод, который вы хотите передать на zenity, отправляется на stderr. Во второй командной строке часть 2>&1 говорит, что нужно перенаправить все выходные сигналы ncftpput на stderr на stdout. Это заставляет это быть передано к zenity.

0
ответ дан 17 October 2011 в 17:04

Другие вопросы по тегам:

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