171 votes

Envoyer une chaîne de caractères à stdin

Existe-t-il un moyen de faire cela efficacement en bash :

/my/bash/script < echo 'This string will be sent to stdin.'

Je suis conscient que je pourrais canaliser la sortie de l'écho comme ceci :

echo 'This string will be piped to stdin.' | /my/bash/script

-2voto

KenB Points 16

les alias peuvent et ne peuvent pas traiter les stdin pipés...

Ici, nous créons 3 lignes de sortie

$ echo -e "line 1\nline 2\nline 3"
line 1
line 2
line 3

Nous envoyons ensuite la sortie vers stdin de la commande sed pour les mettre tous sur une ligne

$ echo -e "line 1\nline 2\nline 3" |  sed -e ":a;N;\$!ba ;s?\n? ?g"
line 1 line 2 line 3

Si nous définissons un alias de la même commande sed

$ alias oline='sed -e ":a;N;\$!ba ;s?\n? ?g"'

Nous pouvons envoyer la sortie vers l'entrée stdin de l'alias et il se comporte exactement la même chose

$ echo -e "line 1\nline 2\nline 3" |  oline
line 1 line 2 line 3

Le problème se pose lorsque nous essayons de définir l'alias comme une fonction

$ alias oline='function _oline(){ sed -e ":a;N;\$!ba ;s?\n? ?g";}_oline'

En définissant l'alias comme une fonction, on casse le pipe.

$ echo -e "line 1\nline 2\nline 3" |  oline
>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X