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