web-dev-qa-db-ja.com

コマンドを介してすべてのbashターミナル出力をパイプする方法

特定のコマンドを介してすべてのbashターミナルコマンドをパイプできるようにしたいです(誰かにいたずらをする以外の正当な理由はありません)。特別なことを何もせずに、実行されたコマンドの標準出力を所定のプログラムにパイプするだけです。

例:その所定のプログラムがcowsayであった場合

echo "Hello World"

出力する必要があります

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

どうすればこれを達成できますか? (他の人にいたずらをするのに使用したい楽しいプログラムには、revcowsay、およびlolcatがあります)

5
vikarjramun
exec > >(COMMAND)

COMMANDrevlolcat、またはその他です。これはcowsayでは機能しません。

例えば。

bash-4.3$ exec > >(rev)
bash-4.3$ echo hello
olleh

説明:

  • execは通常、現在のシェルを別のプロセスに置き換えますが、この場合のようにリダイレクトを行うと、現在のシェルに対してリダイレクトが行われます。
  • >リダイレクトstdout
  • >(COMMAND) _COMMANDへの入力

Prompt_COMMANDがある場合、リダイレクトされたstdoutを避けるために、それをstderrに転送する必要があることに注意してください。

6
wjandrea