Aliran "hi" dicetak di prompt saya (di stdin) dan bukan di sayastdout
Tidak, ini bukan "dicetak di Anda stdin".
Jika Anda menekan kembali, itu tidak akan mencoba dijalankan hisebagai perintah. Hanya saja latar belakang echodicetak hisaat kursor mengikuti permintaan Anda.
Mungkin Anda ingin mencetak baris baru , seperti (sleep 1m && echo -e '\nhi' &). (Sesuaikan seperlunya untuk echodi shell Anda. Atau gunakan printfuntuk portabilitas.)
Saya menempatkan bagian &dalam subkulit untuk "menolak" pekerjaan latar belakang, sehingga Anda juga menghindari "suara" dari [1]+ Done. Dengan di &&antara perintah, &berlaku untuk seluruh rantai majemuk-perintah, sehingga kembali ke prompt shell segera daripada menunggu untuk sleepkeluar seperti yang Anda dapatkan dengan(sleep 1; echo ... &)
Inilah yang terjadi (dengan penundaan 1 detik):
peter@volta:~$ (sleep 1 && echo -e '\nhi' &)
peter@volta:~$
hi
# cursor is at the start of this empty line.
Bash tidak tahu bahwa echomencetak sesuatu, jadi tidak tahu itu perlu mencetak ulang promptnya atau membersihkan layar. Anda dapat melakukannya secara manual dengan control-L.
Anda bisa menulis fungsi shell yang mendapat bash untuk mencetak ulang promptnya setelah echoselesai . Hanya melakukan echo "$PS1"tidak akan mereproduksi karakter yang sudah diketik. kill -WINCH $$pada sistem saya mendapat bash untuk mencetak ulang baris prompt tanpa membersihkan layar, meninggalkan hibaris sendiri sebelum prompt. SIGWINCH dikirim secara otomatis ketika WINdow size Mengubah, dan respons bash terhadapnya melakukan apa yang kita inginkan.
Mungkin bekerja dengan cangkang lain, tapi saya tidak berusaha membuat 100% portable / POSIX ini. ( Sayangnya, ini hanya bekerja pada bash4.4, bukan bash4.3, atau tergantung pada beberapa pengaturan yang saya tidak sadari )
# bash4.4
peter@volta:~$ (sleep 2 && echo -e '\nhi' && kill -WINCH $$ &)
peter@volta:~$ ljlksjksajflasdf dfas # typed in 2 seconds
hi
peter@volta:~$ ljlksjksajflasdf dfas # reprinted by Bash because of `kill -WINCH`
Anda dapat dengan mudah menyelesaikannya dalam fungsi shell yang membutuhkan argumen sleep dan sebuah pesan.
bash 4.3 tidak mencetak ulang promptnya setelah SIGWINCH, jadi ini tidak berfungsi di sana. Saya telah shopt -s checkwinsizemengaktifkan kedua sistem, tetapi hanya bekerja pada sistem Bash 4.4 (Arch Linux).
Jika tidak berhasil, Anda dapat mencoba (sleep 2 && echo -e '\nhi' && echo "$PS1" &), yang "berfungsi" jika baris perintah kosong. (Ini juga mengabaikan kemungkinan yang PROMPT_COMMANDdiatur.)
Tidak ada cara yang benar-benar bersih untuk mendapatkan output terminal untuk bercampur dengan apa pun yang Anda lakukan di terminal nanti, ketika timer menyala. Jika Anda sedang menggulirkan sesuatu less, Anda dapat dengan mudah melewatkannya.
Jika Anda mencari sesuatu dengan hasil interaktif, saya sarankan memutar file audio. misalnya dengan pemain command-line like mpv(fork of MPlayer2). Atau pilih file video sehingga jendela baru terbuka.
(sleep 1 && mpv /f/share/music/.../foo.ogg </dev/null &>/dev/null &)
Anda mungkin ingin memiliki echoxterm / konsole / gnome-terminal baru Anda. Gunakan opsi yang membuat terminal tetap terbuka setelah perintah keluar.