redirecionamento condicional SH [fechado]

3

Eu quero redirecionar alguma saída do meu script para /dev/null com base em uma opção de linha de comando. Eu não sei como devo fazer isso.

De maneira boba, seria algo assim (de uma maneira muito simplificada):

#!/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

Alguma pista, por favor?

Obrigado pessoas.

    
por j4x 06.08.2012 / 21:13

3 respostas

6

Vincule STDOUT a outro identificador se você estiver no modo verbose; caso contrário, vincule esses identificadores a / dev / null. Em seguida, escreva seu script para que o material opcional aponte para as alças extras.

#!/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

Isso deve começar. Eu não tenho certeza se isso é BASH específico ou não. Foi apenas uma lembrança de muito tempo atrás. ; -)

    
por 06.08.2012 / 23:06
3

Eu não sei sobre sh mas em bash (não é o mesmo!) você precisará usar eval :

$ x='> foo'
$ echo Hi $x
Hi > foo
$ eval echo Hi $x
$ cat foo
Hi
    
por 06.08.2012 / 21:21
0

Eu acredito que seu teste está de trás para frente. Você deseja redirecionar para /dev/null quando não no modo detalhado:

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