Восстановление вывода на терминал после выдачи «exec &> filename»

Я пытаюсь выполнить следующее:

exec &>filename 

После этого я не вижу ничего, кроме того, что я набрал, хорошо.

Я безумно стараюсь, exec 1>&1 и exec 2>&2 , но ничего не происходит.

Теперь, не убивая оболочку, как мне вернуть выход, перенаправленный на stdout и ошибку, перенаправленную на stderr соответственно? Являются ли дескрипторы файлов единственным способом ссылки на стандартный [in | out] put и stderr?

2 Solutions collect form web for “Восстановление вывода на терминал после выдачи «exec &> filename»”

После запуска exec &>filename стандартный вывод и стандартная ошибка оболочки переходят к filename . Стандартный ввод – это дескриптор файла по определению, а стандартный вывод – fd 1, а стандартная ошибка – fd 2.

Дескриптор файла не перенаправлен или не перенаправлен: он всегда идет куда-то (при условии, что процесс имеет этот дескриптор открытым). Чтобы перенаправить файловый дескриптор, нужно изменить его. Когда вы запускали exec &>filename , stdout и stderr ранее были подключены к терминалу и подключились к filename .

Всегда есть способ обратиться к текущему терминалу: /dev/tty . Когда процесс открывает этот файл, он всегда означает управляющий терминал процесса, в зависимости от того, что это такое. Поэтому, если вы хотите вернуть исходный stdout и stderr этой оболочки, вы можете сделать это, потому что файл, к которому они были подключены, все еще существует.

 exec &>/dev/tty 

Вы хотите

 exec &>$(tty) 

То, что вы делаете в своем вопросе, – это реплицирование в stdout и stderr исходных stdout и stderr, которые уже были перенаправлены в файл.

Как объясняет tty , tty вернет терминальное устройство текущего терминала. Здесь три стандартных дескриптора файла поступают с / по умолчанию в оболочку входа. Таким образом, в приведенном выше заявлении используется tty для перенаправления stdout и stderr на терминальное устройство, как и раньше.

Если вы обеспокоены переносимостью (в соответствии с вашим ответом на ответ Жиля), оба метода ( утилита /dev/tty файл /dev/tty ) находятся в стандарте POSIX.

Скопировано verbatim из комментария Gilles:

 There's an advantage to /dev/tty: it works even after exec <somefile, whereas $(tty) would complain “not a tty” 
  • Почему выход не перенаправляется в файл?
  • Перенаправить вывод программы в файл не удается
  • Как определить, является ли вывод команды или сценария оболочки стандартным или stderr
  • Захват вывода без перенаправления и оставьте его на терминале тоже
  • Почему я могу добавить файл, но не перезаписать его?
  • Что случилось с этим использованием перенаправления?
  • Ограничить размер файла журнала
  • Предостережения с перенаправлением Stdout / Stderr в файлы?
  • Почему некоторые linux-инструменты записывают в STDERR вместо STDOUT по умолчанию?
  • Как вы помните синтаксис для перенаправления 2> и 1
  • Перенаправление после запуска процесса
  • является ли Linux перенаправлением «>>» медленнее с большими файлами?
  • Interesting Posts

    Начальное ускорение мыши OS Loki

    Как найти строку с наименьшими символами

    Что предоставляет виртуальные загрузочные устройства LSB для Debian?

    Нет действительных источников судопроизводства

    Получить устройство с большим номером 0 (bbffs subvolume)

    Попытка установить раскладку клавиатуры с помощью конфигурации Xorg, но она не работает

    Где находится файл журнала для fsck на Kali v2.0?

    Итерируйте файл до тех пор, пока не будет извлечено каждое значение выше порогового значения

    Скритичные разделы GPT с использованием разделенных

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

    В чем разница между рекурсивной проверкой зависимостей и проверкой обратной зависимости?

    Менеджер драйверов через прокси-сервер

    Этот диск погиб?

    Реализация расширенного регулярного выражения для добавления переменной числа ведущих нулей на основе позиции в строке

    Я не могу подключиться к гостевому os (protostar) через ssh из host-pc (linux mint)

    Linux и Unix - лучшая ОС в мире.