GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie verwende ich die Ausgabeumleitung in Kombination mit Here-Dokumenten und Cat?

Nehmen wir an, ich habe ein Skript, das ich an einen anderen Befehl weiterleiten oder an eine Datei umleiten möchte (Weiterleitung an sh für die Beispiele). Angenommen, ich verwende bash.

Ich könnte es mit echo machen :

echo "touch somefile
echo foo > somefile" | sh

Ich könnte auch fast dasselbe mit cat machen :

cat << EOF
touch somefile
echo foo > somefile
EOF

Aber wenn ich „EOF“ durch „EOF | sh“ es denkt nur, dass es ein Teil des Heredoc ist.

Wie kann ich es so machen, dass cat gibt Text von stdin aus und leitet ihn dann an eine beliebige Stelle weiter?

Akzeptierte Antwort:

Es gibt mehrere Möglichkeiten, dies zu tun. Das einfachste ist wahrscheinlich das:

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

Eine andere, meiner Meinung nach schönere Syntax:

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

Das funktioniert auch, aber ohne die Subshell:

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

Weitere Variationen:

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

Oder:

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

Übrigens erwarte ich die Verwendung von cat in Ihrer Frage ist ein Platzhalter für etwas anderes. Wenn nicht, nehmen Sie es wie folgt heraus:

sh <<EOF
touch somefile
echo foo > somefile
EOF

Was so vereinfacht werden könnte:

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

oder:

sh -c 'touch somefile
echo foo > somefile'

Ausgabe umleiten statt verrohren

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

Verwenden von cat um das Äquivalent von echo test > out zu erhalten :

cat >out <<EOF
test
EOF

Mehrere Here-Dokumente

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

Dies erzeugt die Ausgabe:

hi
---
there

Folgendes ist los:

  • Die Shell sieht den ( ... ) und führt die eingeschlossenen Befehle in einer Subshell aus.
  • Die Katze und das Echo sind einfach genug. Die cat <&3 sagt, dass cat mit dem Dateideskriptor (fd) 0 (stdin) ausgeführt werden soll, der von fd 3 umgeleitet wird; mit anderen Worten, cat out die Eingabe von fd 3.
  • Vor dem (...) gestartet wird, sieht die Shell die beiden hier angegebenen Document Redirects und ersetzt fd 0 (<<EOF ) und fd 3 (3<<EOF2 ) mit der Leseseite von Pipes
  • Sobald der Anfangsbefehl gestartet wurde, liest die Shell ihre Standardeingabe, bis EOF erreicht ist, und sendet diese an die Schreibseite der ersten Pipe
  • Als nächstes macht es dasselbe mit EOF2 und der Schreibseite der zweiten Pipe
Verwandte:Unterstützung von Tmux, TERM und 256 Farben?
Linux
  1. Arbeiten mit Eingabeausgabe und Fehlerumleitung in Linux

  2. Verwendung von Pipes und Named Pipes unter Linux (mit Beispielen)

  3. Wie kann man sich merken, wie man die Umleitung verwendet?

  4. So verwenden Sie Cat, Tac, More, Less – Linux-Befehle

  5. Wie verwende ich sed, um meine Konfigurationsdateien mit flexiblen Schlüsseln und Werten zu ändern?

So verwenden Sie den Linux-Cat-Befehl (mit Beispielen)

So installieren und verwenden Sie Helm in Kubernetes

Wie installiere und verwende ich den Linux-Bildschirm?

So installieren und verwenden Sie PuTTY unter Linux

So installieren und verwenden Sie Alpine mit Gmail IMAP unter Linux

So installieren und verwenden Sie den Ack-Befehl unter Linux mit Beispielen