Как передать все выходные данные терминала через команду
Я хотел бы иметь возможность передавать все команды терминала bash через определенную команду (без веской причины, кроме как разыграть кого-то). Я просто хочу передать стандартный вывод любой выполненной команды в заранее определенную программу, не делая ничего особенного.
Например: если эта предопределенная программа была cowsay
echo "Hello World"
должен выводить
_____________
< Hello World >
-------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
Как мне этого добиться? (Некоторые из забавных программ, которые я хотел бы использовать, чтобы разыграть других, включают rev, cowsay, а также lolcat)
1 ответ
Решение
exec > >(COMMAND)
куда COMMAND является rev, lolcat или другой. Это не будет работать с cowsay,
Например
bash-4.3$ exec > >(rev)
bash-4.3$ echo hello
olleh
Объяснение:
execобычно заменяет текущую оболочку другим процессом, но если вы просто дадите ей перенаправление, как в этом случае, перенаправление будет иметь место для текущей оболочки.>перенаправить стандартный вывод>(COMMAND)вход вCOMMAND
Обратите внимание, что если у вас есть PROMPT_COMMANDВы должны направить его в stderr, чтобы избежать перенаправленного stdout.