Imprime uma mensagem do lado esquerdo de um cano

3

Eu quero usar uma variável do shell principal em um sub shell. Eu fiz:

export mysql_root_password="test"
(
    echo $mysql_root_password
) | dialog --gauge "Working hard..." 6 50

Não há saída. Claro que não existe desde que eu envie a saída para o diálogo. Existe uma maneira de enviar variáveis específicas ainda da maneira normal sem remover a parte da caixa de diálogo?

    
por Michael 07.12.2013 / 20:01

3 respostas

3

Se o seu sistema / shell o suportar, você poderá usar o redirecionamento e a substituição de processo para material de saída em diferentes descritores de arquivo. Por exemplo:

(
    echo "This goes to fd 1"
    echo "This goes to fd 3" >&3
) 3> /dev/tty | some command

Neste exemplo, a primeira instrução de eco é enviada para some command , enquanto a segunda é enviada para o terminal.

(
    echo "This goes to fd 1"
    echo "This goes to fd 3" >&3
) 3> >(some command)

Nesse caso, a primeira instrução de eco vai para stdout e a segunda instrução de eco para some command .

    
por 07.12.2013 / 23:55
2

Você poderia (e provavelmente deveria) imprimir suas mensagens de depuração no fluxo de erros padrão do script, em vez de sua saída padrão. O erro padrão não está passando pelo canal, então está tudo bem.

(
    echo >&2 "$mysql_root_password"
) | dialog --gauge "Working hard..." 6 50

Se você realmente precisar da mensagem na saída padrão do script, poderá abrir um descritor de arquivo adicional conectado à saída padrão do script e redirecionar a mensagem para esse descritor de arquivo.

{
  (
      echo >&3 "$mysql_root_password"
  ) | dialog --gauge "Working hard..." 6 50
} 3>&1

Para mais informações, consulte Quando você usa um descritor de arquivo adicional? e as postagens para as quais ele é vinculado.

    
por 09.12.2013 / 01:24
1

Você pode fazer o eco do valor de mysql_root_password para stderr, se ver esse valor for apenas diagnóstico:

echo $mysql_root_password >&2

Você também pode usar tee :

export mysql_root_password="test"
(
    echo $mysql_root_password
) | tee /dev/tty | dialog --gauge "Working hard..." 6 50

Eu hesito em recomendar tee , pois algumas vezes ele (ou os pipes) armazenam em buffer que faz com que a saída seja menos que útil.

    
por 07.12.2013 / 20:21