Verwenden Sie parallel, um ein Skript ohne Eingabe auszuführen

10

Ich versuche, viele Instanzen eines Skripts mit GNU parallel auszuführen, aber das Skript akzeptiert keine Argumente.

Wenn ich nur 'parallel foo.sh' ausführe, erhalte ich Folgendes:

parallel: Warning: Input is read from the terminal. Only experts do this on purpose. Press CTRL-D to exit.
user1700840
quelle

Antworten:

10

Angenommen, Sie möchten zehn Mal ausgeführt werden, funktioniert diese Syntax:

parallel -n0 foo.sh ::: {1..10}

parallelbenötigt eine Eingabesequenz von einiger Länge ( ::: {1..10}) UND Sie müssen den Inhalt der Eingabesequenz ( -n0) ignorieren , Sie kümmern sich nur um deren Länge.

Ihr ursprünglicher Befehl: parallel foo.shenthält keine Eingabesequenz, die angibt, wie viel Parallelität Sie wünschen. Die kryptische Warnung sagt Ihnen, dass paralleldas Terminal nach einer Eingabesequenz abgehört wird und dass dies wahrscheinlich nicht das ist, was Sie wollen.

Hier ist das Tutorial-Beispiel:

seq 10 | parallel -n0 my_command my_args

Wie es funktioniert:

  • parallelnimmt immer eine Eingabesequenz von irgendwoher. :::Dies kann eine durch Leerzeichen getrennte Inline-Sequenz sein, der ODER eine durch Zeilenumbrüche getrennte Sequenz aus einer Datei oder einer dateiähnlichen Quelle wie einer Pipe vorangestellt ist. In diesem Beispiel stammt die Eingabesequenz aus einer Pipe.
  • seq 10 erzeugt eine durch Zeilenumbrüche getrennte Folge von Ziffern von eins bis zehn.
  • Die -n0Option weist parallel an, die Werte in der Eingabesequenz zu ignorieren. Wir kümmern uns nur um die Länge der Sequenz, nicht um ihren Inhalt. Auch wenn die Ziffern nicht verwendet werden, wird der Befehl zehnmal ausgeführt.

Ein anderes Beispiel:

parallel -n0 echo -n 'x' ::: {1..5}

Wie es funktioniert:

  • Die Eingabesequenz ist inline.
  • {1..5} erzeugt eine durch Leerzeichen getrennte Folge von Ziffern von eins bis fünf.
  • -n0ignoriert Sequenzwerte (und wir geben 'x'stattdessen jedes Mal die Zeichenfolge wieder.)
  • Ausgabe: xxxxx

Vergleichen mit:

parallel echo -n ::: {1..5}

Wie es funktioniert:

  • Die Eingabesequenz ist inline.
  • {1..5} erzeugt eine durch Leerzeichen getrennte Folge von Ziffern von eins bis fünf.
  • Jeder Wert aus der Eingabesequenz wird als Argument für verwendet echo. Bestellung nicht garantiert.
  • Ausgabe : 43215. Könnte jede Bestellung sein.
jwfearn
quelle