Как остановить «grep» от вырезания трубы

Есть ли способ, чтобы echo в конце трубы просто добавлялось к текущему результату, а не удаляло его все? Например, как я могу сохранить вывод для моей cat и grep и добавить «END OF OUTPUT» в конец вывода из того же самого канала:

 $ cat file.txt | grep 'foo' | echo "END OF OUTPUT" something foo foo foo something END OF OUTPUT 

Подобно тому, как cat - работают:

 echo "START OF OUTPUT" | cat - file.txt 

Как это:

 { grep foo file.txt; echo END OF OUTPUT; } > output.txt 

Команды групп не запускают подоболочку (за исключением оболочки Bourne).

Вы можете сделать:

 grep foo file.txt | cat - <(echo END OF OUTPUT) > output.txt 

(с ksh, bash или zsh), но это создает еще несколько дополнительных процессов и труб без дополнительной выгоды.

Используйте подоболочку для группового вывода, как это,

(grep foo file.txt; echo "END OF OUTPUT") > output.txt

Это выполнит то, что вы хотите

 $ cat file.txt | grep 'foo' ; echo "END OF OUTPUT"