Условное перенаправление SH [закрыто]

Я хочу иметь возможность перенаправить некоторый вывод моего скрипта на / dev / null на основе переключателя командной строки . Я не знаю, как мне это сделать.

Глупо, это будет примерно так (слишком упрощенно):

#!/bin/sh

REDIRECT=

if [ $# -ge 1 -a "$1" = "--verbose" ]; then
    echo    "Verbose mode."
    REDIRECT='1>&2 > /dev/null'
fi

echo "Things I want to see regardless of my verbose switch."

#... Other things...

# This command and others along the script should only be seen if I am in verbose mode.
ls -l $REDIRECT

Какие-нибудь подсказки, пожалуйста?

Спасибо, народ.

3
задан 7 August 2012 в 03:56
3 ответа

Свяжите STDOUT с другим дескриптором, если вы находитесь в подробном режиме, в противном случае свяжите эти дескрипторы с / dev / null. Затем напишите свой сценарий так, чтобы дополнительные элементы указывали на дополнительные дескрипторы.

#!/bin/sh

exec 6>/dev/null

if [ $# -ge 1 -a "$1" = "--verbose" ]; then
echo    "Verbose mode."
exec 6>&1
fi

echo "Things I want to see regardless of my verbose switch."

#... Other things...

# This command and others along the script should only be seen if I am in verbose mode.
ls -l >&6 2>&1

Это должно помочь вам начать работу. Я не уверен, относится ли это к BASH или нет. Это было воспоминание о давних временах. ; -)

6
ответ дан 3 December 2019 в 04:53

Я считаю, что ваш тест не соответствует действительности. Вы хотите перенаправить на / dev / null , когда не в подробном режиме:

if [ $# -ge 1 -a "$1" = "--verbose" ]; then
    echo    "Verbose mode."
else
    REDIRECT='2>&1 >/dev/null'
fi
0
ответ дан 3 December 2019 в 04:53

Я не знаю насчет sh , но в bash (не то же самое!) Вам нужно будет использовать eval :

$ x='> foo'
$ echo Hi $x
Hi > foo
$ eval echo Hi $x
$ cat foo
Hi
4
ответ дан 3 December 2019 в 04:53

Теги

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