Wie man einen Job in den Vordergrund bringt und Benutzereingaben vom Terminal aus erlaubt

313
6bajillion

Ähnlich wie diese Frage, aber in einer wichtigen Hinsicht anders: Ich muss eine Reihe von Jobs mit einem Skript starten und sie im Hintergrund ausführen. Um sie zu verwalten oder ihren Fortschritt zu überprüfen, muss ich sie in den Vordergrund bringen und Benutzereingaben zulassen.

Was ich gerade mache, ist:

  1. Starten Sie eine Reihe von Jobs in einer Schleife, z

    for ip in $(cat ip-list.txt); do run-job.sh $ip &; done 
  2. Bringen Sie einen einzelnen Job in den Vordergrund mit z

    fg 1 

Dies bringt einen Job in den Vordergrund, jedoch gibt es zwei Probleme: Ich kann keine Benutzereingaben bereitstellen - der Prozess reagiert nicht, als wäre der Prozess, der meine Eingabe empfängt, das Skript, mit dem der Job gestartet wurde, und nicht der Job selbst; Auch die Variable $ ip wird nicht ausgewertet angezeigt, dh genau als "$ ip" statt "192.168.1.34". Wenn ich jedoch 'jobs' eingebe, werden alle 10 Jobs separat aufgeführt (aber alle sehen genau gleich aus: "run-job.sh $ ip". Ich muss ps verwenden, um zu sehen, welcher Job welchen IP-Wert verwendet.)

Das Verhalten, das ich möchte, ist dasselbe wie das, was ich bekommen würde, wenn ich alle diese Jobs anfangen würde, indem ich sie einzeln eintippe und dann Control-z drücke, um sie in den Hintergrund zu stellen. Wenn ich es auf diese Weise mache, wenn ich sie mit fg in den Vordergrund bringe, erlauben sie die Benutzereingabe direkt in den Prozess, und auch die Variable $ ip wird als "192.168.1.34" ausgewertet angezeigt. Das manuelle Eintippen der Jobs ist jedoch für Dutzende oder Dutzende von Jobs nicht möglich.

1
Führen Sie sie vielleicht in "screen" aus. Um die Variable in einer `jobs'-Liste zu erweitern, starten Sie sie mit` eval "./run-job.sh $ ip &" ` tripleee vor 6 Jahren 1
Nebenbei, https://mywiki.wooledge.org/DontReadLinesWithFor tripleee vor 6 Jahren 1
Siehe auch https://serverfault.com/questions/188936/writing-to-stdin-of-background-process tripleee vor 6 Jahren 0

0 Antworten auf die Frage