shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] stderr/stdout


From: Rodrigo R. Martins
Subject: Re: [shell-script] stderr/stdout
Date: Thu, 1 Sep 2011 19:56:40 +0600

Ah, sim... :)

Então, na verdade é como estava lá no trecho que eu postei da documentação
sobre file descriptors... o shell faz uma pré-checagem e retorna um warning
antes do teste que você espera que o script faça em si.

Ele comenta sobre usar parenteses, mas com comandos simples até rolou, mas
quando são compostos como é o caso do "which" não rolou...

Quem sabe alguém mais da velha guarda já viu esse problema antes e conseguiu
contornar de algum jeito mais elegante.

Valeu, pessoal.

Abraços,

Em 1 de setembro de 2011 19:32, Fernando Mercês <address@hidden>escreveu:

> Entendi. Eu não sabia dessa, mas me parece coisa velha, ainda mais se
> tratando do Solaris 5.9. É bem antigo.
>
> Você tem certeza que não tem bash em todas as máquinas? Eu entendo este
> "medo" mas ainda não vi um UNIX sem bash atualmente. Bem, é só um
> sentimento.
>
> O which retorna erro? Aqui no Linux não. Então daria pra fazer direto:
>
> ---
> if which cmd > /dev/null; then
>        echo ok
> else
>        echo not found
> fi
> ---
>
> Perceba que você não precisa de uma variável pra testar no if, já que ele
> testa comandos. ;-)
>
> Abraço!
>
> Att,
>
> Fernando Mercês
> Linux Registered User #432779
> www.mentebinaria.com.br
> softwarelivre-rj.org
> @MenteBinaria
> ------------------------------------
> Participe do I Hack'n Rio
>                 hacknrio.org
> ------------------------------------
>
>
> 2011/9/1 Rodrigo R. Martins <address@hidden>
>
> > **
> >
> >
> > Fala Fernando, blz?
> >
> > Não, cara... na verdade eu encontrei uma literatura que me ajudou um
> pouco
> > a
> > entender o que de fato está acontecendo[1]:
> >
> > "On the other hand, some shells, such as Solaris or FreeBSD /bin/sh, warn
> > about missing programs before performing redirections. Therefore, to
> > silently check whether a program exists, it is necessary to perform
> > redirections on a subshell:
> >
> > $ /bin/sh -c 'nosuch 2>/dev/null'
> > nosuch: not found
> > $ /bin/sh -c '(nosuch) 2>/dev/null'
> > $ bash -c 'nosuch 2>/dev/null'
> >
> > "
> >
> > Ou seja... entendo que o shell tenta emitir a mensagem de erro/warning
> > antes
> > mesmo de repassar a saída pro bendito file descriptior...
> >
> > Já fiz alguns testes e ainda continuo, mas não obtive sucesso... Olha
> só...
> > o objetivo maior neste momento é evitar que no meu script emita mensagens
> > de
> > erro quando não achar um binário qualquer. Estou usando Sun/Solaris 5.9.
> >
> > testing=`which command_testing 2>/dev/null`
> >
> > if [ -n "$testing" ]; then
> > command_testing -xpto
> > else
> > echo "[!] Command testing was not found"
> > fi
> >
> > Com bash funciona de boa, mas eu não posso contar que em todas as
> máquinas
> > vai existir o bash instalado...
> >
> > Acontece que não há nada que eu consiga fazer pra evitar os warnings na
> > tela... enfim.
> >
> > Abraços,
> >
> > Rodrigo Martins
> >
> > [1] http://www.gnu.org/s/hello/manual/autoconf/File-Descriptors.html
> >
> > Em 1 de setembro de 2011 17:27, Fernando Mercês <address@hidden
> > >escreveu:
> >
> >
> > > Estranho... o número que precede o ">" é o file descriptor que você
> quer
> > > redirecionar. Será que esse shell (que deve ser o sh) não está
> escrevendo
> > > tanto em stderr quanto em stdout? Tenta:
> > >
> > > $ svcs 2>&1 > /dev/null
> > >
> > > Abraço.
> > >
> > > Att,
> > >
> > > Fernando Mercês
> > > Linux Registered User #432779
> > > www.mentebinaria.com.br
> > > softwarelivre-rj.org
> > > @MenteBinaria
> > > ------------------------------------
> > > Participe do I Hack'n Rio
> > > hacknrio.org
> > > ------------------------------------
> > >
> > >
> > > 2011/9/1 Rodrigo R. Martins <address@hidden>
> > >
> > > > **
> > > >
> > > >
> > > > Pessoal,
> > > >
> > > > Estou fazendo alguns testes com Solaris, e estou tendo alguns
> problemas
> > > > para
> > > > canalizar mensagens de erros para evitar poluir a tela caso algo saia
> > > > diferente do esperado.
> > > >
> > > > Notei que qualquer comando ou sintaxe que não exista, ele obviamente
> > > > reclama
> > > > com uma mensagem de erro mas eu não conseguir achar um meio de
> > controlar.
> > > > Exemplo:
> > > >
> > > > # svcs
> > > > svcs: not found
> > > >
> > > > # svcs 2>/dev/null
> > > > svcs: not found
> > > >
> > > > Se eu tentar com bash ou kornshell, tudo funciona perfeitamente.
> > Exemplo:
> > > >
> > > > bash-2.05# svcs
> > > > bash: svcs: command not found
> > > >
> > > > bash-2.05# svcs 2>/dev/null
> > > >
> > > > Saberiam me dizer o porque?
> > > >
> > > > Desde já agradeço.
> > > >
> > > > Abraços,
> > > >
> > > > Rodrigo
> > > >
> > > > [As partes desta mensagem que não continham texto foram removidas]
> > > >
> > > >
> > > >
> > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > >
> > > ------------------------------------
> >
> > >
> > > ----------------------------------------------------------
> > > Esta lista não admite a abordagem de outras liguagens de programação,
> > como
> > > perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> > prévio
> > > aviso.
> > > ----------------------------------------------------------
> > > Sair da lista: address@hidden
> > > ----------------------------------------------------------
> > > Esta lista é moderada de acordo com o previsto em
> > > http://www.listas-discussao.cjb.net
> > > ----------------------------------------------------------
> > > Servidor Newsgroup da lista: news.gmane.org
> > > Grupo: gmane.org.user-groups.programming.shell.brazil
> > >
> > > Links do Yahoo! Grupos
> >
> > >
> > >
> > >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]