Справа в терміні: bash запускає hello
команду у фоновому режимі, потім відображає підказку, щоб дозволити вам ввести нову команду, потім команда background надрукує деякий вихід. Коли ви вводите наступний командний рядок (порожній командний рядок, якщо ви просто натискаєте Enter), bash відображає повідомлення про те, що фонове завдання закінчено, а потім наступний рядок.
Можливо, ви захочете поекспериментувати зі сценарієм, який починається sleep 3
і почати вводити текст відразу після запуску сценарію у фоновому режимі, щоб побачити, що відбувається з темпом, який ви можете слідувати.
Ви можете змусити bash сповіщати вас негайно, коли фонове завдання припиняється, встановивши notify
параметр з set -b
. Тоді ви побачите:
$ set -b
$ hello &
[1] 12345
$ hello world!
[1]+ Done
Bash не перемальовує підказку в цьому випадку. Ви все ще редагуєте командний рядок у рядку підказок, який з’явився перед друком фонового завдання hello world!
. Ви можете перемалювати поточний рядок, натиснувши Esc 1 Ctrl+ L. Ви можете прив’язати команду redraw-current-line
до більш зручного ключа; наприклад, щоб Ctrl+ Lперемалювати поточний рядок і Ctrl+ Alt+ Lочистити екран, додайте наступні рядки до свого ~/.inputrc
:
"\C-l": redraw-current-line
"\e\C-l": clear-screen
Я не знаю, як зробити так, щоб Баш автоматично перемальовував рядок підказки. Zsh робить це за замовчуванням.