it-swarm.com.de

Leiten Sie mehrere Befehle zu einem einzigen Befehl

Wie kann ich die Standardausgabe mehrerer Befehle an einen einzelnen Befehl weiterleiten?

Beispiel 1: Kombinieren und sortieren Sie die Ausgabe aller drei Echobefehle:

echo zzz; echo aaa; echo kkk

gewünschte Leistung:

aaa
kkk
zzz

Beispiel 2: Schreiben Sie Folgendes neu, sodass sich alle Befehle in einer einzigen Befehlszeile befinden und Pipes verwenden, ohne in eine temporäre Datei umzuleiten:

setopt > /tmp/foo; unsetopt >> /tmp/foo; set >> /tmp/foo; sort /tmp/foo
51
Rob Bednark

Verwenden Sie Klammern (), um die Befehle zu einem einzigen Prozess zu kombinieren, der die Standardausgabe jedes einzelnen verkettet.

Beispiel 1 (beachte, dass $ ist die Shell-Eingabeaufforderung):

$ (echo zzz; echo aaa; echo kkk) | sort
aaa
kkk
zzz


Beispiel 2:

(setopt; unsetopt; set) | sort
86
Rob Bednark

Sie können {} und eliminieren die Notwendigkeit einer Sub-Shell wie in (list), wie so:

{ echo zzz; echo aaa; echo kkk; } | sort

Wir brauchen ein Leerzeichen nach { und davor }. Wir brauchen auch die letzten ;, wenn die Sequenz in eine einzelne Zeile geschrieben wird.

Wir könnten es auch in mehrere Zeilen schreiben, ohne dass ein ;:

Beispiel 1:

{
  echo zzz
  echo aaa
  echo kkk
} | sort

Beispiel 2:

{
  setopt
  unsetopt
  set
} | sort
13
codeforester

In Windows wäre es wie folgt: (echo zzz & echo aaa & echo kkk) | sort

Oder wenn es sich in einer Batch-Datei befindet, kann es sowohl einzeilig (wie Beispiel) als auch mehrzeilig sein:

(
 echo zzz
 echo aaa
 echo kkk
) | sort

Hinweis: Der ursprüngliche Beitrag erwähnt nicht, dass es sich nur um Linux handelt. Daher habe ich die Lösung für die Windows-Befehlszeile hinzugefügt. Dies ist sehr nützlich, wenn Sie mit VHD/VHDX mit diskpart inside-Skripten (echo diskpart_command) Anstatt arbeiten das echo auf das selbe, aber lass da das echo, es gibt auch einen anderen weg ohne echos und mit > redirector, aber es ist sehr fehleranfällig und viel komplexer zu schreiben (warum verwenden) Ein komplizierter, fehleranfälliger Weg, wenn es einen einfachen Weg gibt, der immer gut funktioniert. Denken Sie auch daran, dass %d% den tatsächlichen Pfad angibt (sehr nützlich, um den Pfad von VHD/VHDX-Dateien nicht fest zu codieren).

2
Claudio