Retirando a saída de / dev / tty para uma variável

1

Eu criei dois scripts de backup - um para arquivos (filebackup.sh) e outro para o banco de dados (dbbackup.sh). filebackup.sh chama dbbackup.sh e armazena a saída em uma variável. A saída retornada por dbbackup.sh é o nome do arquivo tar no qual o script armazenou todos os bancos de dados de backup.

O script dbbackup.sh contém o seguinte no final:

echo $TARFILE > /dev/tty

O script filebackup.sh chama dbbackup.sh assim:

DBBACKUP="'/scripts/dbbackup.sh &>/dev/null'"

Isso despeja toda a saída extra do script para / dev / null e garante que apenas o nome do arquivo seja retornado.

Tudo funciona, exceto quando eu chamo de filebackup.sh, o nome do arquivo é impresso na tela. A variável $DBBACKUP permanece vazia. O que estou fazendo errado aqui?

    
por Deepak Mittal 03.08.2011 / 09:19

1 resposta

5

Resumindo: basta remover a parte >/dev/tty de dbbackup.sh ; use apenas:

echo $TARFILE

Isto irá imprimir $ TARFILE para a saída padrão, isto é, para a tela se você estiver rodando dbbackup.sh em um terminal, ou para um arquivo / pipe se o redirecionamento estiver no lugar (como acontece com o backquote do shell / $(...) expansão).

Há também outra razão pela qual a coisa não funciona, mesmo se você corrigir o problema acima: o script dbbackup.sh imprime o nome do arquivo tar na saída padrão, mas na linha

DBBACKUP="'dbbackup.sh >&/dev/null'"

você está descartando qualquer saída proveniente de dbbackup.sh (redirecionando-a para /dev/null ). Se você quisesse descartar erros, use o redirecionamento 2>/dev/null .

Mais uma história: a linha

echo $TARFILE > /dev/tty

redireciona a saída do comando echo para /dev/tty (o terminal ao qual o processo atual está anexado) em vez de imprimir para o fluxo de saída padrão compartilhado por outros comandos no script dbbackup.sh . Portanto, quando você redireciona ainda mais a saída de dbbackup.sh em dbbackup.sh >&/dev/null , esse segundo redirecionamento não afeta o comando echo .

Você pode querer ler um pouco mais sobre redirecionamento de shell e command substitution .

    
por 03.08.2011 / 09:56