4 votes

Rediriger stdin vers stdout

J'ai un script, par exemple monscript.sh, et il doit rediriger vers stdout ce qu'il reçoit de stdin (comme un cat).

Par exemple:

monscript.sh < myfile.txt > myfile2.txt

Comment faire cela?

Aussi, comment puis-je rediriger le stdout vers un autre fichier plutôt que myfile2.txt?

Mes essais:

J'ai essayé en utilisant:

echo $*

Et cela fonctionne uniquement en utilisant:

monscript.sh | cat myfile.txt

Si j'utilise:

monscript.sh < myfile.txt

cela n'affiche rien

4voto

Davyzhu Points 199

Essayez d'ajouter cat <&0 à votre script où vous souhaitez effectuer la redirection.

Le &0 ci-dessus représente le descripteur de fichier stdin, et vous mettez essentiellement les choses que vous obtenez de stdin à cat.

Alternativement, utilisez la boucle suivante pour le faire vous-même :

while read line
do
  echo "$line"
done

3voto

AFH Points 16642

Je ne peux pas comprendre ce que vous voulez: $* affiche les paramètres positionnels et vous n'en avez pas fourni, donc vous n'avez obtenu aucune sortie (à part un saut de ligne).

cat ne lit pas l'entrée standard lorsqu'on lui donne un fichier à lister, donc myscript.sh | cat myfile.txt a le même effet que myscript.sh ; cat myfile.txt (pas strictement vrai, mais correct en termes d'entrée/sortie).

Si vous voulez que votre script copie l'entrée vers la sortie, alors il devrait contenir simplement cat.

Si vous voulez la sortie de $*, alors vous devez exécuter myscript.sh {paramètres}.

Et que voulez-vous dire par "rediriger la sortie standard dans un autre fichier plutôt que dans myfile2.txt"? Vous ne voulez probablement pas dire ... > myfile3.txt.

0voto

xzfc Points 471

Je suppose que vous souhaitez duplicer l'entrée du script en sortie du terminal, et non la rediriger.

cat myfile.txt | tee /dev/tty | myscript.sh > myfile2.txt

ou même plus simple

cat myfile.txt; myscript.sh < myfile.txt > myfile2.txt

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X