Как остановить перенаправление в bash

Я использую :

exec >script.log 2>&1 

в моем скрипте перенаправить весь вывод в файл. В конце сценария я хотел бы напечатать сообщение на экране. Как остановить перенаправление?

  • Как сделать две команды потреблять входные данные из stdin последовательно?
  • Синтаксическая ошибка завершения броуза
  • Запустить сценарий в неинтерактивной оболочке?
  • Как заменить bash на Python?
  • Невозможно суммировать числа, полученные от stdin, используя bc
  • «Меньше» эквивалент командной строки «tail -f»
  • печать и не выполнение результата расширения истории zsh при частичном поиске
  • Почему `rm -f! (/ Var / www / wp)` оставляет файлы в / var / www?
  • 3 Solutions collect form web for “Как остановить перенаправление в bash”

    Вы можете вызвать exec раз, чтобы восстановить исходные дескрипторы. Вам нужно будет их где-то спасти.

     exec 3>&1 4>&2 1>script.log 2>&1 … logged portion … exec 1>&3 2>&4 echo >&2 "Done" 

    Внутри зарегистрированной части вы можете использовать исходные дескрипторы для одной команды, перенаправляя дополнительные дескрипторы.

     echo "30 seconds remaining" >&3 

    Кроме того, вы можете поместить зарегистрированную часть вашего скрипта внутри составной команды и перенаправить эту составную команду. Это не работает, если вы хотите использовать исходные дескрипторы в ловушке где-то внутри этой перенаправленной части.

     { … logged portion … } >script.log 2>&1 echo >&2 "Done" 

    Используйте adddinal fd 3 и 4 для stdout и stderr и просто перенаправляйте 1 и 2 к ним в конце вашего скрипта:

     exec 3>&1 4>&2 exec >script.log 2>&1 echo "Some code" exec >&3 2>&4 echo "Done" 

    Сначала вы должны проверить, есть ли у вас tty.

     if tty -s; then echo "Hello, World" > $(tty) fi 
    Linux и Unix - лучшая ОС в мире.