Linux bash - wie kann ich eine Liste von Binärdateien ausführen, die von einem anderen Skript generiert werden?

515
motam79

Ich habe ein Skript, das eine Liste der auszuführenden Binärdateien generiert:

\home\joe\bin\script1 \home\joe\bin\script2 \home\joe\bin\script3 .. 

Frage 1: Wie kann ich alle diese Dateien nacheinander über die Befehlszeile ausführen? Eine Möglichkeit, dies zu tun, besteht darin, die Liste der Binärdateien in eine temporäre Datei zu überführen temp.shund die .shDatei auszuführen . Ist es möglich, eine temporäre .shDatei zu erstellen?

Frage 2: Wie kann ich alle diese Dateien parallel ausführen?

1

2 Antworten auf die Frage

1
yarl

Antislashes sollten in Ihrem Beispiel Schrägstriche sein, denke ich

yarl@nb$ pwd /tmp yarl@nb$ cat list  #!/bin/sh  echo /tmp/foo echo /tmp/bar yarl@nb$ cat foo #!/bin/sh  echo I say foo sleep 2 echo I say foo yarl@nb$ cat bar #!/bin/sh  echo And I say bar sleep 2 echo And I say bar yarl@nb$ cat parallel  #!/bin/sh  ./list | while read cmd; do $cmd & done 

Zu rennen:

./list | sh 

parallel zu:

./parallel 

Wenn "Liste" n Dateien auflistet, sind dies n Jobs, die parallel ausgeführt werden. Wenn Sie dies steuern möchten, verwenden Sie einen Zähler oder eine Gnu-Parallele oder etwas anderes. Siehe https://stackoverflow.com/questions/5547787/running-shell-script-in-parallel

1
Ole Tange

Verwenden von GNU Parallel:

Frage 1:

list_generator_program | parallel -j1 

Frage 2:

list_generator_program | parallel 

Dadurch wird ein Job pro CPU-Kern parallel ausgeführt.