GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser la redirection de sortie en combinaison avec Here-documents et Cat ?

Disons que j'ai un script que je veux diriger vers une autre commande ou rediriger vers un fichier (diriger vers sh pour les exemples). Supposons que j'utilise bash.

Je pourrais le faire en utilisant echo :

echo "touch somefile
echo foo > somefile" | sh

Je pourrais aussi faire presque la même chose en utilisant cat :

cat << EOF
touch somefile
echo foo > somefile
EOF

Mais si je remplace "EOF" par "EOF | sh" il pense juste que c'est une partie de l'heredoc.

Comment puis-je faire en sorte que cat sort le texte de stdin, puis le redirige vers un emplacement arbitraire ?

Réponse acceptée :

Il existe plusieurs façons de procéder. Le plus simple est probablement celui-ci :

cat <<EOF | sh
touch somefile
echo foo > somefile
EOF

Un autre, qui est une syntaxe plus agréable à mon avis :

(
cat <<EOF
touch somefile
echo foo > somefile
EOF
) | sh

Cela fonctionne aussi, mais sans le sous-shell :

{
cat <<EOF
touch somefile
echo foo > somefile
EOF
} | sh

Plus de variantes :

cat <<EOF |
touch somefile
echo foo > somefile
EOF
  sh

Ou :

{ cat | sh; } << EOF
touch somefile
echo foo > somefile
EOF

Au fait, je m'attends à l'utilisation de cat dans votre question est un espace réservé pour autre chose. Sinon, sortez-le, comme ceci :

sh <<EOF
touch somefile
echo foo > somefile
EOF

Ce qui pourrait être simplifié à ceci :

sh -c 'touch somefile; echo foo > somefile'

ou :

sh -c 'touch somefile
echo foo > somefile'

Redirection de la sortie au lieu de canalisation

sh >out <<EOF
touch somefile
echo foo > somefile
EOF

Utilisation de cat pour obtenir l'équivalent de echo test > out :

cat >out <<EOF
test
EOF

Plusieurs documents ici

( cat; echo ---; cat <&3 ) <<EOF 3<<EOF2
hi
EOF
there
EOF2

Cela produit la sortie :

hi
---
there

Voici ce qui se passe :

  • Le shell voit le ( ... ) et exécute les commandes jointes dans un sous-shell.
  • Le chat et l'écho sont assez simples. Le cat <&3 dit d'exécuter cat avec le descripteur de fichier (fd) 0 (stdin) redirigé depuis fd 3 ; en d'autres termes, extraire l'entrée de fd 3.
  • Avant le (...) est démarré, le shell voit ici les deux redirections de document et remplace fd 0 (<<EOF ) et fd 3 (3<<EOF2 ) avec le côté lecture des tubes
  • Une fois la commande initiale lancée, le shell lit son stdin jusqu'à ce qu'EOF soit atteint et l'envoie du côté écriture du premier tube
  • Ensuite, il fait la même chose avec EOF2 et le côté écriture du deuxième tube
Connexes :Prise en charge de Tmux, TERM et 256 couleurs ?
Linux
  1. Comment utiliser les commandes 'cat' et 'tac' avec des exemples sous Linux

  2. Utilisation de l'entrée-sortie et de la redirection d'erreur sous Linux

  3. Comment utiliser les canaux et les canaux nommés sous Linux (avec exemples)

  4. Comment installer et utiliser Flatpak sous Linux

  5. Comment utiliser Cat, Tac, More, Less – Commandes Linux

Comment utiliser Linux Cat Command (avec exemples)

Comment installer et utiliser Helm dans Kubernetes

Comment installer et utiliser Linux Screen ?

Comment installer et utiliser PuTTY sous Linux

Comment installer et utiliser Alpine avec Gmail IMAP sous Linux

Comment installer et utiliser la commande Ack sous Linux avec des exemples