So bringen Sie einen Job in den Vordergrund und ermöglichen Benutzereingaben vom Terminal

So bringen Sie einen Job in den Vordergrund und ermöglichen Benutzereingaben vom Terminal

Ähnlich zudiese Frageaber in einem wichtigen Punkt anders: Ich muss eine Reihe von Jobs über ein Skript starten und im Hintergrund ausführen. Um sie dann zu verwalten oder ihren Fortschritt zu überprüfen, muss ich sie in den Vordergrund bringen und Benutzereingaben zulassen.

Was ich derzeit mache, ist:

  1. Starten Sie mehrere Jobs in einer Schleife, zB

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

    fg 1 
    

Dadurch wird ein Job in den Vordergrund gebracht, allerdings gibt es dabei zwei Probleme: Ich kann keine Benutzereingaben machen – der Prozess reagiert nicht, als wäre der Prozess, der meine Eingaben empfängt, das Skript, das den Job gestartet hat, und nicht der Job selbst; außerdem wird die Variable $ip unausgewertet angezeigt, also genau als „$ip“ und nicht als „192.168.1.34“. Wenn ich jedoch „Jobs“ eingebe, werden alle 10 Jobs separat aufgelistet (aber sie sehen alle genau gleich aus: „run-job.sh $ip“. Ich muss ps verwenden, um zu sehen, welcher Job welchen IP-Wert verwendet.)

Das gewünschte Verhalten ist das gleiche, das ich erhalten würde, wenn ich alle diese Jobs starte, indem ich sie einzeln eingebe und dann Strg-Z drücke, um sie in den Hintergrund zu stellen. Wenn ich es auf diese Weise mache und sie mit fg in den Vordergrund bringe, ermöglichen sie Benutzereingaben direkt in den Prozess, und außerdem wird die Variable $ip als „192.168.1.34“ ausgewertet. Das manuelle Eintippen der Jobs ist jedoch für Dutzende oder Dutzende von Jobs nicht praktikabel.

verwandte Informationen