web-dev-qa-db-fra.com

Comment diriger toutes les sorties du terminal bash via une commande

Je voudrais être capable de diriger toutes les commandes du terminal bash via une certaine commande (sans raison valable autre que de jouer une farce à quelqu'un). Je veux juste canaliser la sortie standard de toute commande exécutée dans un programme prédéterminé sans rien faire de spécial.

Par exemple: Si ce programme prédéterminé était cowsay

echo "Hello World"

devrait produire

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

Comment puis-je atteindre cet objectif? (Certains des programmes amusants que je voudrais utiliser pour faire des farces sur d’autres incluent rev, cowsay et lolcat)

5
vikarjramun
exec > >(COMMAND)

COMMAND est rev, lolcat ou autre. Cela ne fonctionnera pas avec cowsay.

Par exemple.

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

Explication:

  • exec remplace normalement le Shell actuel par un autre processus, mais si vous lui donnez simplement une redirection comme dans ce cas, la redirection aura lieu pour le Shell actuel.
  • > redirect stdout
  • >(COMMAND) entrée dans COMMAND

Notez que si vous avez un Prompt_COMMAND, vous devez le diriger vers stderr pour éviter la sortie standard redirigée.

6
wjandrea