web-dev-qa-db-fra.com

faire en sorte que Cowsay envoie un mot à la fois dans du mastic

Bonjour, je me demandais comment obtenir cowsay pour lire un mot à la fois à partir d’un fichier texte. Je suis à Ground Zero en ce moment, j'utilise PuTTY et j'ai vraiment besoin d'aide.

6
LOGANr18

Cela semble être un cas rare où le fractionnement de Word est réellement souhaitable:

for Word in $(<file.txt); do cowsay "$Word"; sleep 1; done

(la commande sleep est facultative). Ou il y a toujours xargs:

xargs -a file.txt -n1 cowsay
7
steeldriver

Voici quelque chose que je suis venu très rapidement. J'ai mis une ligne dans un fichier test, puis je l'ai envoyé à Cowsay.

terrance@terrance-ubuntu:~$ cat cstest.txt 
This is a test file to test cowsay

Je le règle pour lire chaque ligne, puis fais un for loop de chaque ligne pour lire chaque mot. Exemple ci-dessous:

:~$ cat cstest.txt | while read line; do for Word in $line; do cowsay $Word; done; done
 ______
< This >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ____
< is >
 ----
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ___
< a >
 ---
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ______
< test >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ______
< file >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ____
< to >
 ----
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ______
< test >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ________
< cowsay >
 --------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Chaque ligne individuelle de cette commande ressemblerait à ceci:

:~$ cat cstest.txt | while read line
>do 
>for Word in $line
>do 
>cowsay $Word
>done
>done

J'espère que cela t'aides!

5
Terrance

Python one-liner:

python -c 'import sys,subprocess;[subprocess.call(["cowsay",w]) for l in sys.stdin for w in l.split()]' < words.txt

Échantillon échantillon:

$ cat words.txt
this is a test
$ python -c 'import sys,subprocess;[subprocess.call(["cowsay",w]) for l in sys.stdin for w in l.split()]' < words.txt                 
 ______
< this >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ____
< is >
 ----
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ___
< a >
 ---
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ______
< test >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
$ 
5