Восстановление вывода к терминалу, выпустив “должностное лицо и> имя файла”

В /var/www, создайте папку public_html и реконфигурируйте это как свой корневой каталог для Apache. Файлы в /var/www может быть включен, но не получен доступ непосредственно.

15
20.09.2013, 18:54
2 ответа

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

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

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

exec &>/dev/tty
23
27.01.2020, 19:49
  • 1
    как @Joseph R. ответил, что $ (tty) показывает мне/dev/pty0, но Ваша команда также работает, какой является более портативным через разновидности Unix? благодарите эй u за больше четкого ответа. –  user917279 23.09.2013, 14:58
  • 2
    @user917279 Они являются одинаково портативными в смысле работы над различными разновидностями Unix. /dev/tty работы в случаях, где $(tty) не делает: /dev/tty работы пока процесс имеют терминал управления (который является лучшим, можно надеяться, поскольку должно быть что-то все еще соединение процесса с терминалом), тогда как $(tty) требует, чтобы терминал все еще был открыт на стандартном входе. –  Gilles 'SO- stop being evil' 24.09.2013, 01:38

Вы хотите

exec &>$(tty)

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

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

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

Скопированный дословно с комментария Gilles:

There's an advantage to /dev/tty: it works even after exec <somefile, 
whereas $(tty) would complain “not a tty”
11
27.01.2020, 19:49
  • 1
    , он работает!Спасибо. $ эха (tty) дает/dev/pty0 (в cygwin), как он связан с stdin, stdout и что происходит с вышеупомянутым оператором? сообщите мне, должен ли я спросить это как отдельный вопрос. –  user917279 23.09.2013, 14:54
  • 2
    @user917279 обновляется. –  Joseph R. 23.09.2013, 16:49
  • 3
    . Я отправил этот вопрос перед рассмотрением ответа Giles.Большое спасибо. Позвольте мне отмечать ответ Giles, как принято, поскольку он сделал даже немые умы как мои для понимания правильно. –  user917279 23.09.2013, 18:43
  • 4
    Существует преимущество для /dev/tty: это работает даже после exec <somefile, тогда как $(tty) жаловался бы “не tty”. –  Gilles 'SO- stop being evil' 24.09.2013, 01:38
  • 5
    @Gilles спасибо за характерно поучительный :) –  Joseph R. 24.09.2013, 02:55

Теги

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