Đó là vấn đề thời gian: bash khởi chạy hello
lệnh trong nền, sau đó nó hiển thị lời nhắc để cho phép bạn nhập một lệnh mới, sau đó lệnh nền sẽ in một số đầu ra. Khi bạn nhập dòng tiếp theo lệnh (một dòng lệnh trống, nếu bạn chỉ cần bấm Enter), màn hình bash được thông báo rằng công việc nền đã hoàn tất, sau đó nhắc tới.
Bạn có thể muốn thử nghiệm một tập lệnh bắt đầu sleep 3
và bắt đầu nhập ngay sau khi khởi chạy tập lệnh ở chế độ nền, để xem những gì đang xảy ra với tốc độ bạn có thể theo dõi.
Bạn có thể làm cho bash thông báo cho bạn ngay lập tức khi công việc nền kết thúc bằng cách đặt notify
tùy chọn với set -b
. Sau đó, bạn sẽ thấy:
$ set -b
$ hello &
[1] 12345
$ hello world!
[1]+ Done
Bash không vẽ lại lời nhắc trong trường hợp này. Bạn vẫn đang chỉnh sửa một dòng lệnh trên dòng nhắc xuất hiện trước khi công việc nền được in hello world!
. Bạn có thể vẽ lại dòng hiện tại bằng cách nhấn Esc 1 Ctrl+ L. Bạn có thể muốn liên kết lệnh redraw-current-line
với một khóa thuận tiện hơn; ví dụ: để có Ctrl+ Lvẽ lại dòng hiện tại và Ctrl+ Alt+ Lxóa màn hình, hãy thêm các dòng sau vào ~/.inputrc
:
"\C-l": redraw-current-line
"\e\C-l": clear-screen
Tôi không biết cách nào để bash vẽ lại dòng nhắc nhở tự động. Zsh làm điều đó theo mặc định.