2016-01-27 8 views
9

Beim Lesen der Dokumentation [1] erscheint der Begriff "jobspec" einige Male.bash: Was ist ein Jobspec?

Was ist ein jobspec?

[1] https://www.gnu.org/software/bash/manual/html_node/Job-Control-Builtins.html

+2

Ein Konzept, das nichts mit der Programmierung zu tun hat [und für die gehören also Fragen über Super-User], da es Teil der Funktionalität ist, die nicht in nicht-interaktiver Verwendung aktiviert ist. :) –

+0

@CharlesDuffy Ob dies auf Superuser gehört, ist eine offene Frage. Die Jobsteuerung, die für ein Skript verfügbar ist, _are_ ist verfügbar (z. B. können Sie 'wait% 1' ausführen). Ein Beispiel für die Verwendung: ein Skript, das mehrere tausend Dateien videotranscodieren wird. Das Skript wird auf einem 8-Kern-Computer ausgeführt. Das Skript verwendet die Jobsteuerung, um 8 Arbeitsprozesse zu verwalten, und startet eine neue, wenn eine alte abgeschlossen ist. Normalerweise mache ich so etwas in Perl, aber es könnte in bash gemacht werden. –

+0

@CraigEstey, Sie können 'wait% 1' nur tun, wenn' [[$ - = * m *]] '(" monitor mode ") standardmäßig in nicht interaktiven Shells falsch ist (und mit anderen nützlichen Funktionen nicht kompatibel ist, wie 'shopt -s lastpipe'). Andernfalls müssen Sie auf die PID warten, um den Exit-Status zu erfassen. Dies ist der übliche Weg für Skripte wie das oben beschriebene ('start_encoder & encoder_pids + = ($!); ...; für pid in '$ {encoder_pids [@]} "; warten Sie" $ pid "|| echo" Encoder fehlgeschlagen "; fertig" oder so). –

Antwort

9

The job control section of Greg's Bash Guide beschreibt dies wie folgt:

Eine Auftragsspezifikation oder "jobspec" ist ein Weg, um die Prozesse zu verweisen, die einen Job machen. Ein jobspec kann sein:

  • %nn auf Auftragsnummer zu verweisen.
  • %str bezieht sich auf einen Job, der mit einem Befehl gestartet wurde, der mit str beginnt. Es ist ein Fehler, wenn mehr als ein solcher Job vorhanden ist.
  • %?str verweist auf einen Job, der mit einem Befehl gestartet wurde, der str enthält. Es ist ein Fehler, wenn mehr als ein solcher Job vorhanden ist.
  • %% oder %+ beziehen sich auf den aktuellen Job: Der zuletzt im Hintergrund gestartete oder vom Vordergrund ausgehende. fg und bg werden für diesen Job ausgeführt, wenn keine Jobspezifikation angegeben wird.
  • %- für den vorherigen Job (der Job war %% vor dem aktuellen).
+0

Wenn Sie nicht selbst etwas geschrieben haben, sollte es zugeschrieben werden - nicht nur mit einem Link, sondern mit Prosa machen Sie klar, welcher Inhalt ist und ist kein originaler Teil Ihrer Antwort. –

+0

@Charles Duffy Verstanden. Ich werde entsprechend bearbeiten. Vielen Dank. –

+0

Ich bin mir nicht sicher, ob ich den Bash Guide "die Dokumentation" nennen würde, obwohl ich manchmal denke, dass es so sein sollte. =) –