terminal de saída redireciona para zenity

0

Vamos explicar minha dúvida.
Nós todos sabemos que >& é a sintaxe shell para "dobrar um descritor de arquivo em outro". Então 2>&1 significa que eu quero redirecionar o stderr para o stdin, isso é simples e claro :)
O que eu não entendo é isso (vamos explicar com um exemplo)

ncftpput -u $user -p $pass $host $remote_dir $local_file | zenity --text-info --title "Putting files..." --width 600 --height 300

O código acima não funciona ... mas isso funciona perfeitamente:

ncftpput -u $user -p $pass $host $remote_dir $local_file 2>&1 | zenity --text-info --title "Putting files..." --width 600 --height 300

Eu não undestrand porque se eu colocar 2>&1 o redirecionamento para o trabalho zenity e se eu não escrever 2>&1 redirecionamento não funciona. Por quê?

    
por Paolo 17.10.2011 / 15:04

1 resposta

1

Por convenção, os aplicativos produzem saída em dois descritores de arquivo: 1 ( stdout ) e 2 ( stderr ). O recurso de pipe do shell redireciona o stdout de um processo para o stdin do outro. Dessa forma, os aplicativos podem separar as mensagens de erro ou de status de suas saídas normais e ainda serem utilizáveis ao transmitir sua saída.

Parece que a saída que você deseja enviar para zenity está sendo enviada para stderr . Na sua segunda linha de comando, a parte 2>&1 diz para redirecionar toda a saída ncftpput envia para stderr para stdout . Isso faz com que seja canalizado para zenity .

    
por James Henstridge 17.10.2011 / 15:10