Erros diretos em encontrar / dev / null por padrão

0

Na linha de comando do OSX, find direciona os erros para STDOUT . Acho isso muito inconveniente, e também acho irritante adicionar 2>/dev/null ao final do comando todas as vezes. Isso traz várias questões:

  • Esta é uma configuração ampla do sistema (por exemplo, fazer erros direcionados para STDOUT no OSX, mas para /dev/null no Linux) ou é específico para find ?
  • Existe uma maneira de fazer com que esse comportamento seja assumido por padrão (sem criar um alias)?
  • Em caso afirmativo, seria necessário um segundo comando para restaurar o comportamento original?
  • Se não, existe um atalho que é menor que 2>/dev/null (por exemplo, unzip -qq em vez de unzip >/dev/null )?
  • Como você faria essa alteração em uma caixa Linux?
por cwallenpoole 29.05.2014 / 16:42

1 resposta

1

Embora ambos apareçam no seu terminal da mesma maneira, STDERR não está sendo redirecionado para STDOUT.

Para verificar se estou mentindo, tente executar o comando find que estava gerando erros (sem nenhum redirecionamento) e colocando > example.file no final dele. Se os erros gerados aparecerem na sua tela, mas não no arquivo gerado chamado example.file , então você sabe que o STDERR não está sendo redirecionado, porque se fosse toda a saída estaria no arquivo gerado.

Quando você adiciona 2>/dev/null , o que você está dizendo é "pegue todas as saídas de STDERR e grave-as no arquivo / dev / null".

Esta é uma configuração de todo o sistema (por exemplo, fazer erros diretos para STDOUT no OSX mas para / dev / null no Linux) ou isso é específico para encontrar?

Não; Por padrão, ao executar programas do terminal STDIN, STDOUT e STDERR, todos são copiados para o terminal, mas são tratados de maneira diferente internamente (ou seja, têm alias para diferentes descritores de arquivo), como no Linux. Por padrão, os erros são sempre impressos no console quando você executa um programa, de modo que, se algo der errado, você sabe o que, quando e por quê. /dev/null é como um buraco negro; uma vez que a informação entra você não pode recuperá-la. A maioria das pessoas não quer que a saída de erro desapareça misteriosamente no ether, então (nenhuma distro Linux que eu conheça) faz isso por padrão.

Existe uma maneira de fazer o achado tomar esse comportamento por padrão (sem criar um alias)?

Se você quiser fazer com que o achado se comporte dessa maneira toda vez sem usar um alias ( que ... quero dizer, um alias não funcionaria de qualquer maneira, porque os aliases só funcionam quando você quer substituir o início do comando apenas , e redirecionamentos tem que ser no final Belay que; eu estava errado; redirecionamentos podem ser colocados entre / antes de argumentos sem problema), uma maneira seria definir uma função no bash (eu suponho que você use bash; desculpas se isso for um erro) da seguinte forma:

find() { command find "$@" 2>/dev/null }

Se não, existe um atalho que é menor que 2 > / dev / null (por exemplo, unzip -qq em vez de unzip > / dev / null)?

Não há nenhum arquivo de configuração, variável de ambiente ou opção conveniente que você possa usar, se é isso que você quer dizer.

Como você faria essa alteração em uma caixa Linux?

O mesmo que no OSX. Se você não quiser redefinir essa função toda vez que fizer login, adicione essa linha ao arquivo ~/.bashrc . Embora ... Venha para pensar sobre isso, eu acho que há um diferente no OSX, lá. No OSX, tenho certeza que você realmente precisa adicioná-lo ao ~/.bash_profile para que ele funcione.

    
por 29.05.2014 / 17:45