C'est une question de timing: bash lance la hello
commande en arrière-plan, puis il affiche une invite pour vous permettre d'entrer une nouvelle commande, puis la commande d'arrière-plan imprime une sortie. Lorsque vous entrez la ligne de commande suivante (une ligne de commande vide, si vous appuyez simplement sur Enter), bash affiche la notification que le travail d'arrière-plan est terminé, puis l'invite suivante.
Vous pouvez essayer un script qui commence par sleep 3
et commencer à taper juste après avoir lancé le script en arrière-plan, pour voir ce qui se passe à un rythme que vous pouvez suivre.
Vous pouvez demander à bash de vous informer immédiatement de la fin d'un travail en arrière-plan en définissant l' notify
option avec set -b
. Ensuite, vous verrez:
$ set -b
$ hello &
[1] 12345
$ hello world!
[1]+ Done
Bash ne redessine pas l'invite dans ce cas. Vous modifiez toujours une ligne de commande sur la ligne d'invite qui est apparue avant l'impression du travail d'arrière-plan hello world!
. Vous pouvez redessiner la ligne actuelle en appuyant sur Esc 1 Ctrl+ L. Vous voudrez peut-être lier la commande redraw-current-line
à une clé plus pratique; par exemple, pour avoir Ctrl+ Lredessiner la ligne actuelle et Ctrl+ Alt+ Leffacer l'écran, ajoutez les lignes suivantes à votre ~/.inputrc
:
"\C-l": redraw-current-line
"\e\C-l": clear-screen
Je ne connais aucun moyen de faire bash redessiner automatiquement la ligne d'invite. Zsh le fait par défaut.
Gilles 'SO- arrête d'être méchant'
la source