De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Julio Cezar Neves
Data de Publicação: 03 de outubro de 2019
Um recadinho rápido, no dia 7 de outubro, às 23h59m, fecharemos as inscrições para o curso Programação Shell Linux, com o Prof. Julio Neves. Esta será a última turma deste ano, então se você quiser entrar 2020 com tudo, esta é a sua chance.
»» Clique aqui ««« para saber mais e ver os depoimentos de nossos alunos.
Como vimos, FD1>&-
tranca a saída com o file descriptor FD1
. Será que isso funciona com a saída de erros?
$ ls NaoExiste 2>&- || echo Esse arquivo não foi criado ainda
Esse arquivo não foi criado ainda
Funcionou, e é mais rápido que:
$ ls NaoExiste 2>/dev/null || echo Esse arquivo não foi criado ainda
Que é o que você vê em 99% dos scripts.
No entanto, trancar o redirecionamento da saída primária dá erro:
$ ls Existe >&- && echo Arquivo foi criado ls: erro de gravação: Descritor de arquivo inválido $ ls Existe 1>&- && echo Arquivo foi criado ls: erro de gravação: Descritor de arquivo inválido
Isso ocorre porque o operador &&
tentou mandar um texto para uma saída trancada.
Para criar exemplos rápidos vou usar linhas de comandos dentro de parênteses, porque estes criam um subshell e desta forma podemos emular o que aconteceria se os dados estivessem em um script.
Para começar, quero mandar uma mensagem para a StdErr. Mas como faço isso?
$ (echo Certo; echo Erro) 2> x; echo Arquivo x = -$(cat x)-
Certo
Erro
Arquivo x = --
Não é assim que se faz, ambas as saídas foram para StdOut. Vamos então redirecionar a mensagem de erro para StdErr:
$ (echo Certo; echo Erro >&2) 2> x; echo Arquivo x = -$(cat x)-
Certo
Arquivo x = -Erro-
Essa é a forma correta - embora rara de se ver - de mandarmos uma mensagem para StdErr.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários