O problema aqui não é um problema com o redirecionamento do Linux; pelo contrário, é um mal-entendido fundamental de como o pipeline funciona. O redirecionamento aqui não está funcionando porque apenas o corte é realmente impresso em stdout. O stdout para o comando echo foi direcionado para o stdin do cut (que não está sendo usado neste caso desde que um arquivo foi especificado).
echo "header line" > output_file && cut -c 1-5 input_file >> output_file
é o que você deseja e não é deselegante (substituí-o ;
por, &&
para que o comando cut seja executado apenas se o cabeçalho for gravado com sucesso; dessa forma, não será executado se você não tiver permissões para criar ou gravar em output_file )
Você também pode fazer tudo em uma subcama, por exemplo.
(echo "header line"; cut -c 1-5 input_file) > output_file
mas não há benefício real em fazer isso e, com exemplos mais complexos, pode causar problemas se você não estiver familiarizado com o escopo do subshell.
Se você deseja cortar para passar de stdin para stdout, tente:
echo "header line" | cut -c 1-5 - input_file
(O traço é um atalho comum para stdin)
No entanto, isso também executará a operação de corte no stdin (resultando em uma linha de cabeçalho de "cabeçalho"). É difícil dizer se é isso que você quer ou não com a pergunta.
{ .... } > some_file 2>&1
(vai "clobber" nome_ficheiro não clobber, mas acrescentar a ela em vez disso, basta alterar o.>
Em um>>
:{ ... } >> some_file 2>&1
)Apenas para completar as respostas, há exec.
fonte