Я использовал
exec > /dev/null
для подавления вывода.
Есть ли команда, чтобы отменить это? (Без перезапуска script.)
Я использовал
exec > /dev/null
для подавления вывода.
Есть ли команда, чтобы отменить это? (Без перезапуска script.)
Чтобы сделать это правильно, вам нужно скопировать исходный FD 1 где-то еще, прежде чем переписывать его в /dev/null. В этом случае я сохраняю резервную копию на FD 5:
exec 5>&1 >/dev/null
...
exec 1>&5
Другой вариант - перенаправление stdout внутри блока, а не использование exec:
{
...
} >/dev/null
Если вы просто хотите получить вывод снова в командной строке, вы можете сделать это:
exec >/dev/tty
Если вы создаете script, и хотите, чтобы выводился вывод определенной группы перенаправленных команд, поместите эти команды в фигурные скобки:
{
command
command
} >/dev/null
Для восстановления stdout я использую
unset &1
Сохраните исходные выходные цели заранее.
# $$ = the PID of the running script instance
STDOUT='readlink -f /proc/$$/fd/1'
STDERR='readlink -f /proc/$$/fd/2'
И восстановите их снова, используя exec.
exec 1>$STDOUT 2>$STDERR
Если вы используете /dev/tty для восстановления, в отличие от этого, вы не сможете выполнять перенаправления на уровне вызовов, например, bash script.sh &>/dev/null не будет работать.
Не совсем, поскольку это потребует изменения состояния запущенного процесса. Даже если предположить, что вы могли бы, независимо от того, что вы написали до сброса стандартного вывода, действительно, полностью исчезли, поскольку он был отправлен в бит-ведро.