No momento em que escrevi isso, a sintaxe da resposta aceita estava errada para a maioria, senão todas, as conchas derivadas de Bourne, inclusive bash
. Sugeri uma edição na parte superior e aceitei a resposta para corrigir isso, mas também estava inclinado a adicionar todas essas outras informações, e isso teria sido mais uma reescrita do que uma edição.
Você pode usar comandos compostos:
{ grep ...; bzgrep ...; } >file
..ou subcascas (observe os parênteses em vez de chaves):
(grep ...; bzgrep ...) >file
..para agrupar os comandos. A maneira do subshell possui uma sintaxe melhor (mais tolerante à falta de espaço em branco e permite que você omita o último ponto e vírgula), mas cria um novo processo ou "finge" executando os comandos em um ambiente limpo. Ambos têm vantagens dependendo do que você deseja fazer, o que não importa aqui, mas vale a pena procurar se você quiser mais proficiência com o shell.
Nota: Você também pode usar o pipelining com esses truques, para fazer algo assim:
{ grep ...; bzgrep ...; } | less
PS se você não se preocupam com a ordem das partidas em sua produção combinada, você pode usar um único &
entre os dois comandos, assim: { grep ... & bzgrep ...; }
. Em seguida, os dois comandos são executados simultaneamente: o grep
é lançado e o shell o coloca em segundo plano; então, o shell executa o bzgrep
. (Mas há uma pequena ressalva sobre isso, com a explicação que envolve o redirecionamento de arquivos e o buffer de fluxo de arquivos, potencialmente fazendo com que uma parte muito pequena das linhas no arquivo de saída seja dividida / mutilada: se você verá isso, isso dependerá de como grep
, bzgrep
, e as libc
stdio.h
funções são implementadas. Na maioria das implementações, acredito que canalizar o comando antes de redirecionar para um arquivo evitará o problema; portanto, você pode fazer isso { foo & bar; } | cat - >file
como uma solução alternativa.)