Es ist eine Frage des Timings: bash startet den hello
Befehl im Hintergrund, zeigt dann eine Eingabeaufforderung an, mit der Sie einen neuen Befehl eingeben können, und der Hintergrundbefehl gibt eine Ausgabe aus. Wenn Sie die nächste Befehlszeile eingeben (eine leere Befehlszeile, wenn Sie nur drücken Enter), zeigt bash die Benachrichtigung an, dass der Hintergrundjob beendet wurde, und dann die nächste Eingabeaufforderung.
Möglicherweise möchten Sie mit einem Skript experimentieren, das mit dem sleep 3
Schreiben beginnt, und direkt nach dem Starten des Skripts im Hintergrund mit der Eingabe beginnen, um zu sehen, was in einem Tempo geschieht, dem Sie folgen können.
Sie können Bash Sie sofort benachrichtigen lassen, wenn ein Hintergrundjob beendet wird, indem Sie die notify
Option mit festlegen set -b
. Dann werden Sie sehen:
$ set -b
$ hello &
[1] 12345
$ hello world!
[1]+ Done
Bash zeichnet die Eingabeaufforderung in diesem Fall nicht neu. Sie bearbeiten immer noch eine Befehlszeile in der Eingabeaufforderungszeile, die vor dem Drucken des Hintergrundjobs angezeigt wurde hello world!
. Sie können die aktuelle Zeile durch Drücken von Esc 1 Ctrl+ neu zeichnen L. Möglicherweise möchten Sie den Befehl redraw-current-line
an eine bequemere Taste binden . beispielsweise haben Ctrl+ Ldie aktuelle Zeile neu zu zeichnen und Ctrl+ Alt+ Lden Bildschirm löschen, fügen Sie die folgenden Zeilen in ~/.inputrc
:
"\C-l": redraw-current-line
"\e\C-l": clear-screen
Ich kenne keine Möglichkeit, Bash dazu zu bringen, die Eingabeaufforderungszeile automatisch neu zu zeichnen. Zsh macht es standardmäßig.
Gilles 'SO - hör auf böse zu sein'
quelle