Как передать весь вывод терминала bash через команду [duplicate]

Я бы хотел чтобы иметь возможность передавать все команды терминала bash через определенную команду (без уважительной причины, кроме как разыграть кого-то). Я просто хочу передать стандартный вывод любой выполненной команды в заранее определенную программу, не делая ничего особенного.

Например: Если эта предопределенная программа была cowsay

echo "Hello World"

, должна вывести

 _____________
< Hello World >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Как я могу этого добиться? (Некоторые забавные программы, которые я хотел бы использовать, чтобы подшутить над другими, включают rev , cowsay и lolcat )

6
задан 1 June 2018 в 09:29

1 ответ

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.

6
ответ дан 23 November 2019 в 07:48

Другие вопросы по тегам:

Похожие вопросы: