これはタイミングの問題です。bashはhello
コマンドをバックグラウンドで起動し、新しいコマンドを入力するプロンプトを表示して、バックグラウンドコマンドは出力を出力します。次のコマンドライン(を押すだけの場合は空のコマンドラインEnter)を入力すると、bashはバックグラウンドジョブが完了したという通知を表示し、次に次のプロンプトを表示します。
で始まるスクリプトを試しsleep 3
、バックグラウンドでスクリプトを起動した直後に入力を開始して、フォローできるペースで何が起こっているかを確認することもできます。
でnotify
オプションを設定することにより、バックグラウンドジョブが終了したときにすぐにbashに通知させることができます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
bashにプロンプトラインを自動的に再描画させる方法がわかりません。Zshはデフォルトでこれを行います。