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 hi
sebagai perintah. Hanya saja latar belakang echo
dicetak hi
saat kursor mengikuti permintaan Anda.
Mungkin Anda ingin mencetak baris baru , seperti (sleep 1m && echo -e '\nhi' &)
. (Sesuaikan seperlunya untuk echo
di shell Anda. Atau gunakan printf
untuk 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 sleep
keluar 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 echo
mencetak 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 echo
selesai . 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 hi
baris 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 checkwinsize
mengaktifkan 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_COMMAND
diatur.)
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 echo
xterm / konsole / gnome-terminal baru Anda. Gunakan opsi yang membuat terminal tetap terbuka setelah perintah keluar.