Как я условно перенаправляю вывод команды к/dev/null?

У меня есть сценарий. Я хотел бы дать этому сценарию тихий режим и подробный режим.

Это - эквивалент:

if $verbose
then
  redirect="> /dev/null"
fi

echo "Verbose mode enabled" $redirect # This doesn't work because the redirect isn't evaluated.

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

оценка могла работать, но имеет очевидные побочные эффекты на других переменных.

14
задан Lawrence Johnston 25 March 2010 в 23:11
поделиться

3 ответа

Вы можете написать функцию-обертку:

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, вы можете, конечно, сделать функцию проще, просто повторяя первый аргумент вместо того, чтобы выполнять их все как команду)

10
ответ дан 1 December 2019 в 13:21
поделиться

Похоже на другой вопрос :

#!/bin/sh

if [ $SILENT ]; then
    exec &>/dev/null
fi

echo "Silence here."
6
ответ дан 1 December 2019 в 13:21
поделиться

Не идеально, но как насчет настройки перенаправления на «/ dev / null» или «/ dev / tty» ", а затем выполнение

{
   echo "verbose"
    ....
} > $redirect
3
ответ дан 1 December 2019 в 13:21
поделиться
Другие вопросы по тегам:

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