On Sun, Apr 8, 2012 at 5:44 AM, Jorge Barros de Abreu <[email protected]> wrote: > > Olá. > > Tenho o seguinte script.sh: > > #!/bin/sh > ping -i 2 127.0.0.1 1>/dev/null & > read -n 1 > sudo /bin/kill `sudo /sbin/pidof ping` 1>&- 2>&-
Por que tu fecha os file descriptors do stdout e stderr ao invés de simplesmente mandá-los para o /dev/null? Eu nunca vi fazer isto que tu faz com estes dois file descriptors [em um shell script]. O uso mais comum que eu vi para querer fechar um file descriptor é quando tu cria um para funcionar como um "named pipe", algo tipo: ---- 8< ---- # abre /var/log/meulog para leitura e escrita e atribui o file descriptor 3 ao mesmo exec 3<>/var/log/meulog # joga stdout para o file descriptor 3 enquanto roda comando_qualquer comando_qualquer >&3 # executa o comando "parser_de_log" que lê o log no file descriptor 3 parser_de_log <&3 # fecha o file descriptor 3 exec 3>&- ---- >8 ---- Na verdade, eu não sei nem se dá pra fechar um file descriptor num comando normal, eu sempre achei que só podia em um "exec". A propósito, tu pode usar o pkill ou o killall e ai não precisa mais usar o sudo para matar um processo que tu mesmo iniciou. > read -n 1 > sleep 5 > > -ao fazer "sh script.sh" em um terminal/konsole eu obtenho a seguinte > mensagem: > > script.sh: line 6: 5609 Terminado ping -i 2 127.0.0.1 > > /dev/null Off topic: Tenta usar C ao invés do teu locale nos scripts; os locales não só costumam deixar as coisas um pouco mais lentas como as vezes eles são os principais culpados por problemas com tratamento de entrada e saída de comandos. > -ao fazer "sh script.sh 2>/dev/null" Pode ser alguma "funcionalidade" do bash rodando no modo de compatibilidade. Quando tu executa o bash como sh, ele entra no modo de compabilidade e no Slackware o /bin/sh é um link simbólico para /bin/bash. Se tu executar "bash script.sh 2>/dev/null", o que acontece? Meu palpite é que o ocorre o mesmo que no xterm. > a mensagem some - OK. > > -mas ao fazer "xterm -e sh script.sh 2>/dev/null" > > a mensagem retorna. > > Preciso retirar essa mensagem do xterm. > Os redirecionamentos de stdout e stderr estão sendo ignorados pelo referido > xterm. Provavelmente deve ser porque tu fecha os file descriptors ao invés de jogar para o /dev/null? Um strace deve dizer melhor o que acontece (olha os fopen/fclose). > Eu sei que existem outras formas de retirar a mensagem como "grep -v" mas o > fato inusitado de o xterm > ignorar os redirecionamentos me chama a atenção. Acho que não é necessáriamente o xterm e sim o bash. De qualquer forma eu não uso nenhum dos dois há muito tempo, eu não sei explicar exatamente o por quê deste comportamento -- só palpites. :) -- GUS-BR - Grupo de Usuários de Slackware Brasil http://www.slackwarebrasil.org/ http://groups.google.com/group/slack-users-br Antes de perguntar: http://www.istf.com.br/perguntas/ Para sair da lista envie um e-mail para: [email protected]

