Я не уверен, правильно ли я понимаю ваши требования, но как насчет:
# put the lines below at the beginning of the script
if (( echoOn == 0 )); then
exec 3>/dev/null 2>&3
else
exec 3>&1
fi
# then execute your commands
echo foo >&3 # a command which wants to switch the redirection
echo warn >&2 # simulates an error
echo bar # a command which does not need the switch
Если для echoOn
установлено значение 0
, на терминале отображается только bar
.
Проблема в том, что вам нужно изменить код, заменив все >/dev/null 2>&1
выражения на >&3
.
[Обновить]
In Чтобы управлять как stdout, так и stderr по команде Speci c, попробуйте следующее:
echoOn=0 # set to "1" to ebable stdout/stderr else set to "0"
if (( echoOn == 0 )); then
exec 3>/dev/null
exec 4>/dev/null
else
exec 3>&1
exec 4>&2
fi
echo foo 1>&3 2>&4 # a command which wants to switch the redirection
(echo warn >&2) 1>&3 2>&4 # simulates an error
echo bar # a command which does not need the switch
(echo error >&2) # simulates anerror
Пожалуйста, поставьте 1>&3 2>&4
для команд, для которых вы хотите управлять выводом