Eu tenho um programa que gera saída para stdout e gostaria de silenciar essa saída em um script Bash ao canalizar para um arquivo.
Por exemplo, a execução do programa produzirá:
% myprogram
% WELCOME TO MY PROGRAM
% Done.
Eu quero que o seguinte script não produza nada no terminal:
#!/bin/bash
myprogram > sample.s
Respostas:
Se o resultado for stderr, você precisará silenciar isso. Você pode fazer isso redirecionando o descritor de arquivo 2:
fonte
&>
é muito mais antigo que o bash 4.&>
introdução da documentação do changelog ? : o>>&
foi introduzido na 4.0. Não há menção,&>
mas as MUDANÇAS voltam para a versão 2.0, então eu acho que isso significa que já estava na 1.x.git blame
onredir.c
aponta para um commit de 1998 para a ocorrência mais antiga ainda na base de código atual.Redirecionar stderr para stdout
Isso redirecionará o stderr (que é o descritor 2) para o descritor de arquivo 1, que é o stdout.
Redirecionar stdout para arquivo
Agora, ao fazer isso, você está redirecionando o stdout para o arquivo
sample.s
Redirecionar stderr e stdout para Arquivo
A combinação dos dois comandos resultará no redirecionamento de stderr e stdout para sample.s
Redirecionar stderr e stdout para / dev / null
Redirecione para
/dev/null
se você deseja silenciar completamente seu aplicativo.fonte
myprogram >/dev/null 2>&1
(observe a cunha antes/dev/null
e a ordem dos redirecionamentos).myprogram &>/dev/null
seria suficiente?Toda saída:
Portátil:
Portátil:
Para o bash mais recente (não portátil):
fonte
-
e&>
é uma extensão de shell bourne não portátil.echo moo 1>&-
produz um erro porque o descritor de arquivo 1 está fechado:-bash: echo: write error: Bad file descriptor
Se você quer STDOUT e STDERR ambos [tudo], a maneira mais simples é:
em seguida, execute-o como
./script
você não obterá saída para o seu terminal. :)o "> &" significa STDERR e STDOUT. o
&
também funciona da mesma maneira com um tubo:./script |& sed
que irá enviar tudo para sedfonte
a 2>&1 | b 2>&1 | c
Se você ainda está lutando para encontrar uma resposta, especialmente se você produziu um arquivo para a saída e prefere uma alternativa clara:
echo "hi" | grep "use this hack to hide the oputut :) "
fonte
Tente com:
para não obter saída
fonte
Nota: Esta resposta está relacionada à pergunta "Como desativar o eco durante a execução de um shell script Linux", que por sua vez foi marcado como duplicado para este.
Para realmente desativar o eco, o comando é:
(isto é, por exemplo; quando você deseja inserir uma senha e não deseja que seja legível. Lembre-se de ativar o eco no final do seu script, caso contrário, a pessoa que executa o script não verá o que ele Ela digita a partir de então.Para ativar o eco, execute:
fonte
Útil em scripts:
Obtenha apenas o STDERR em um arquivo, enquanto oculta qualquer STDOUT, mesmo que o programa a ocultar não exista (nunca interrompe o script pai), apenas isso funcionava:
Desanexe completamente e silencie tudo, até matar o script pai não abortará
./prog
:fonte
Para saída apenas com erro :
fonte