Saya tahu bahwa saya dapat menghapus tiga karakter terakhir dengan:
echo -ne '\b\b\b'
Tetapi bagaimana saya bisa menghapus satu baris penuh? Maksud saya, saya tidak ingin menggunakan:
echo -ne '\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b'
... dll ... untuk menghapus garis panjang.
command-line
echo
LanceBaynes
sumber
sumber
echo -ne "\033[2K" ; printf "\r"
sekarang baris itu baik seperti baru, seolah-olah itu tidak pernah ditulis sebelumnya.echo -ne "\e[2K\r"
. Namun ANSI lolos dari urutan FTW, toh.Jawaban:
Anda dapat menggunakan
\b
atau\r
untuk memindahkan kursor kembali dan kemudian menimpa karakter yang dicetak dengan karakter baru. Perhatikan bahwa tidak ada\b
atau pun\r
penghapusan karakter yang dicetak. Itu hanya memindahkan kursor kembali.\b
memindahkan kursor kembali satu karakter dan\r
memindahkan kursor ke awal baris.Contoh: keduanya
dan
akan dicetak:
Jika Anda ingin karakter dihapus maka Anda harus menggunakan solusi berikut:
keluaran:
Kutipan dari
man echo
:sumber
echo -e 'fooooooooo\rbar
gema barooooooo.echo -e 'foooo\b\b\b\b\b\b\b\b\b\bbar'
juga gemabaroo
.printf
.Anda sedang mencari pelarian terminal . Secara khusus, untuk menghapus dari posisi kursor ke awal baris:
Atau semua yang ada di telepon, terlepas dari posisi kursor:
Dan Anda dapat melakukan segala macam trik rapi lainnya dengan terminal lolos juga.
sumber
-e
karenaecho
argumen tidak sesuai dengan POSIX + Saya tidak suka urutan escape. Lebih sukaprintf
atautput
.-e
parameter untukecho
tidak sesuai dengan POSIX tetapi masih ...Jika Anda ingin menghapus garis, maka saya sarankan Anda menggunakan kombinasi carriage return yang orang sebutkan dan terminfo.
Ini akan menulis
xyzzyxyzzy
, kemudian kembali ke awal baris dan mengirim urutan "jelas ke ujung baris" ke terminal, kemudian menulisfoobar
. The-n
echo tidak menambahkan baris baru setelahfoobar
.sumber
printf '%s\r%s%s' xyzzyxyzzy "$ceol" foobar
untuk portabilitas dan untuk menghindari memiliki konten$ceol
melalui\x
ekspansi.Anda secara eksplisit meminta
echo
, tetapi permintaan ini membuat Anda kecewa. Berikut ini pendekatan yang menggunakanprintf
perintah built bash dengan brace expansion:sumber
Berikut ini contoh menggunakan echo no newline
-n
dan carriage return\r
options.sumber
Alih-alih
echo -en "\r"
Anda mungkin juga menemukanprintf "\r"
perintah sebagai berguna. Dengan cara ini Anda dapat memformat string. misalnya:Saya biasanya melakukannya juga ketika beroperasi dengan parsing file lambat untuk menampilkan nama file yang sedang berlangsung tanpa membuat daftar
sumber
Sebagai pertanyaan, hapus baris penuh
Saya telah menggunakan perintah di bawah ini dengan kombinasi
echo
dansed
untuk menghapus barisSetelah eksekusi, hasil perintah akan kosong. Sejak saat baris tidak akan diganti
perintah
sumber
Berikut adalah contoh penghitung waktu mundur yang saya gunakan:
sumber