O problema aqui não é um problema com o redirecionamento do Linux; em vez disso, é um mal-entendido fundamental de como o pipeline funciona. O redirecionamento aqui não está funcionando porque o corte somente está realmente imprimindo no stdout. stdout para o comando echo foi canalizado para o stdin do cut (que não está sendo usado neste caso desde que um arquivo é especificado).
echo "header line" > output_file && cut -c 1-5 input_file >> output_file
é o que você quer, e não é nada deselegante (eu substituí seu ;
por &&
para que o comando cut só seja executado se o cabeçalho for escrito com sucesso; dessa forma ele não será executado se você não o fizer) t tem permissões para criar ou gravar em output_file).
Você também pode fazer tudo em um subshell, por exemplo.
(echo "header line"; cut -c 1-5 input_file) > output_file
mas não há nenhum benefício real em fazer isso e, com exemplos mais complexos, pode causar problemas se você não estiver familiarizado com o escopo da sub-rede.
Se você quiser que o corte passe 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 da pergunta.