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 ответа
Свяжите 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 или нет. Это было просто воспоминание о давних временах.;-)
Я не знаю о sh
но в bash
(не то же самое!) вам нужно использовать eval
:
$ x='> foo'
$ echo Hi $x
Hi > foo
$ eval echo Hi $x
$ cat foo
Hi
Я считаю, что ваш тест задом наперед. Вы хотите перенаправить на /dev/null
когда не в подробном режиме:
if [ $# -ge 1 -a "$1" = "--verbose" ]; then
echo "Verbose mode."
else
REDIRECT='2>&1 >/dev/null'
fi