Saya punya file dengan warna ANSI.
test.txt:
\e[0;31mExample\e[0m
Saya ingin menampilkan konten file ini di terminal, seperti cat
halnya, tetapi saya juga ingin menampilkan warna.
cat
cetak Anda ?
echo -e $(cat test.txt)
.
Saya punya file dengan warna ANSI.
test.txt:
\e[0;31mExample\e[0m
Saya ingin menampilkan konten file ini di terminal, seperti cat
halnya, tetapi saya juga ingin menampilkan warna.
cat
cetak Anda ?
echo -e $(cat test.txt)
.
Jawaban:
Saya sedang mencari solusi untuk pertanyaan bash yang tepat ini. Saya hampir ketinggalan komentar @Thomas Dickey yang memberi saya solusi paling elegan.
echo -e $(cat test.txt)
Beberapa hal yang tidak berhasil bagi saya adalah (tampaknya Anda tidak dapat menyambungkan hal-hal ke gema)
cat test.txt | echo -e
atau
less -R test.txt
Masalah lain yang saya miliki adalah bahwa echo -e tidak mencetak baris baru dan spasi putih yang berdekatan di dalam file dengan baik. Untuk mencetaknya, saya menggunakan yang berikut ini.
echo -ne $(cat test.txt | sed 's/$/\\n/' | sed 's/ /\\a /g')
Ini berfungsi untuk file test.txt yang berisi
\e[0;31mExa mple\e[0m
\e[0;31mExample line2\e[0m
\a
membunyikan bel untuk saya. Saya mengubah perintah sed kedua Anda sed 's/ /\\033\\a /g'
yang tidak membunyikan bel.
$(cat file.txt)
tanda kutip ganda dan menambahkan baris baru di akhir - tidak perlu untuk sed - jadi: echo -ne "$(<file.txt)" \\n
atau echo -ne "$(cat <<"EOF" . . . EOF)" \\n
. Itu juga mencegah bash melakukan ekspansi global dalam teks.
Jika Anda tidak melihat warna dari cat
karakter kontrol mungkin tidak utuh.
Beberapa alat menghapus karakter kontrol tetapi biarkan di ujung ekor.
Membandingkan:
echo -e "\e[0;31mExample\e[0m foo"
untuk
echo -e "[0;31mExample[0m foo"
Anda mungkin dapat membangun kembali urutan kontrol dari yang tersisa, meskipun itu bukan bukti bodoh karena regex yang Anda gunakan mungkin secara tidak sengaja menarik urutan karakter yang tidak diinginkan, dll. Tapi misalnya:
echo -e "[0;31mExample[0m foo" | sed "s:\[\([0-9]*[;m]\):^[[\1:g"
akan mengembalikan warna ke string contoh.
Ini seharusnya bekerja secara default. Misal jika saya lakukan ls --color=always > /tmp/a
dan daripada cat /tmp/a
, saya melihat warnanya. Memeriksa dengan od
mengkonfirmasi bahwa file tersebut menggunakan warna ANSI.
Jadi saya pikir Anda harus memeriksa apakah terminal Anda mendukung warna ANSI (dan mereka diaktifkan).
less -R
, misalnya.