У меня есть сценарий. Я хотел бы дать этому сценарию тихий режим и подробный режим.
Это - эквивалент:
if $verbose
then
redirect="> /dev/null"
fi
echo "Verbose mode enabled" $redirect # This doesn't work because the redirect isn't evaluated.
Я действительно хотел бы лучший способ сделать это, чем запись если-elses для каждого затронутого оператора.
оценка могла работать, но имеет очевидные побочные эффекты на других переменных.
Вы можете написать функцию-обертку:
redirect_cmd() {
# write your test however you want; this just tests if SILENT is non-empty
if [ -n "$SILENT" ]; then
"$@" > /dev/null
else
"$@"
fi
}
Затем вы можете использовать ее для выполнения любой команды с перенаправлением:
redirect_cmd echo "unsilenced echo"
redirect_cmd ls -d foo*
SILENCE=1
redirect_cmd echo "nothing will be printed"
redirect_cmd touch but_the_command_is_still_run
(Если вам нужно только echo, вы можете, конечно, сделать функцию проще, просто повторяя первый аргумент вместо того, чтобы выполнять их все как команду)
Похоже на другой вопрос :
#!/bin/sh
if [ $SILENT ]; then
exec &>/dev/null
fi
echo "Silence here."
Не идеально, но как насчет настройки перенаправления на «/ dev / null» или «/ dev / tty» ", а затем выполнение
{
echo "verbose"
....
} > $redirect