Você pode cercar uma sequência de comandos com parênteses. Cada comando dentro dos parênteses terá acesso ao mesmo stdin, stdout e stderr. Aqui, echo
enviará para stdout, mas não alterará o stdin que grep
vê.
cpp $1 | (echo 'your constant line here'; grep -v "#") | theprogram
Conforme descrito na linguagem de comando do shell: comandos de agrupamento , é possível usar chaves de parênteses para agrupamento. Usar chaves é um pouco mais eficiente, já que um subshell não será criado, mas apresenta uma sintaxe mais complicada: é necessário que haja um separador de campo após o {
e um delimitador como ;
ou nova linha antes do }
. Mas várias pessoas sugeriram isso como uma alternativa, então aqui está:
cpp $1 | { echo 'your constant line here'; grep -v "#"; } | theprogram