Apakah ada cara Anda dapat membuat konten yang ditampilkan menghilang setelah pengguna memberikan input?
Misalnya, ambil file ini di bawah
#!/bin/bash
read -n 1 -p 'how are you ? ' var
if [ "$var" == "y" ]
then
echo 'Have fun'
else
echo 'Go to Doctor'
fi
Jika Anda menjalankan ini, hasilnya adalah
how are you ? yHave fun
Saya mencari sesuatu yang membuat saya how are you ?
menghilang segera setelah pengguna menekan tombol
Dan kemudian setelah menghilang, cetak Have fun
Jadi, saya ingin keluaran terakhir dari program di atas hanya
Have fun
Catatan: Juga, apa pun di atas skrip ini yang dicetak pada layar shell tidak boleh dihapus.
saya menggunakan bash
clear
di antaraecho
s bukan pilihan?clear
akan menghapus output yang sudah dicetak di atas pada layar jika ada. @sebasthAre you fine
? Bukankah seharusnya begituHow are you
?Jawaban:
Kamu bisa menggunakan:
(atau
printf '\r'
) untuk memindahkan kursor ke awal baris. Diikuti oleh:untuk menghapus semuanya hingga akhir baris. (
tcsh
danzsh
juga memilikiechotc
builtin yang dapat Anda gunakan dengan yangtermcap
setara dengan ituterminfo
el
:echotc ce
(jugaechoti el
dalamzsh
)sumber
Gunakan carriage return (
\r
). Karakter khusus ini (sisa dari zaman mesin tik mekanis) akan memindahkan kursor kembali ke awal baris. Kemudian, Anda membutuhkan ruang sebanyak pesan yang ingin Anda hapus (ini akan menimpa pesan) dan kemudian carriage kedua kembali untuk kembali ke awal sebelum mencetak pesan berikutnya. Sesuatu seperti ini:Menjalankan skrip di atas cetakan:
sumber
\r
Anda bisa menempatkan semua ruang antara\rHave fun
dan\n
.Ada beberapa cara untuk melakukan ini, mulai dari bukti idiot hingga elegan.
Metode yang paling mudah (meskipun yang paling berhasil) adalah ruang backspace backspace diulang namun berkali-kali dibutuhkan. Ini berfungsi pada semua hal kecuali teletype (menghilangkan tinta dari kertas adalah suatu tantangan).
Selanjutnya skala adalah carriage return spasi carriage return. Ini tidak berfungsi dengan emulator terminal yang menyisipkan umpan baris sebelum atau setelah setiap carriage return (ini adalah minicom pilihan dan yang lain mungkin dikonfigurasi untuk dimiliki).
Lalu ada trik khusus terminal saya akan menyebutkan hanya kode kapabilitas termcap sebagai termcap dan database terminfo dapat menunjukkan penggunaan. (Ini daftar.)
Sederhana untuk satu baris adalah pindah ke kolom (ch) diikuti oleh clear to end of line (ce).
Untuk kasus-kasus yang lebih rumit termasuk respons multi-jalur, ada save absolute position (sc), prompt, read response, restore position cursor (rc), hapus ke ujung layar (cd).
Dalam kebanyakan kasus, Anda dapat meng-hardcode nilai vt100 untuk dua jawaban terakhir karena sebagian besar emulator terminal kompatibel dengannya. Tentu saja tidak semua terminal mendukung opsi-opsi itu, tetapi terminal yang tidak jarang dan usang.
sumber