bash: Zeigt die Namen der Hintergrundjobs in der Bash-Eingabeaufforderung an

541
american-ninja-warrior

Es wäre cool, wenn die Bash-Eingabeaufforderung als Mini-Taskleiste verwendet werden kann.

Kann der Bash-Prompt (PS1) die Namen der im Befehl jobs aufgeführten Jobs anzeigen?

0
Sie können alles, was Sie möchten, in `PS1` einfügen, einschließlich` $ (jobs | Filter) `, wobei` Filter 'die Ausgabe in das gewünschte Format massiert. Um alles in einer Zeile zu erhalten, verwenden Sie `echo $ ($ (jobs | Filter))`. Sie können natürlich alle anderen Zeichen hinzufügen, die Sie normalerweise in "PS1" verwenden würden, aber ** müssen ** bei der Zuweisung einfache Anführungszeichen verwenden, um sicherzustellen, dass der eingebettete Befehl beim Ausgeben der Eingabeaufforderung erweitert wird und nicht wann Die Variable ist gesetzt. AFH vor 8 Jahren 0

1 Antwort auf die Frage

0
PBI

AFH im Kommentar gibt Ihnen die Bausteine. Hier ist ein Beispiel, wie Sie das Zitat korrekt erhalten.

Als "Name des Jobs" wähle ich den Befehlsnamen des Jobs (das erste Wort nach "Running"):

PS1='$(echo $(jobs | awk '\''/Running/'\''))$ ' 

Und wenn Sie das mit zwei Hintergrundbefehlen ausprobieren und einfach ein paar Mal "enter" eingeben, um die Eingabeaufforderung zu ändern:

$ sleep 4 & sleep 2 & [1] 7222 [2] 7223 [sleep] [sleep]$  [sleep] [sleep]$  [2]+ Done sleep 2 [sleep]$  [1]+ Done sleep 4 $