Perintah gema dengan opsi warna dalam skrip dan perintah berfungsi berbeda

15

Jika saya menjalankan echo -e "\e[1;31mThis is red text\e[0m"baris perintah, Ini mencetak teks merah.

Namun, jika saya gunakan tulis di file script test.sh

#! /bin/bash
echo -e "\e[1;31mThis is red text\e[0m"

Lari $ sh test.sh

Mencetak -e \e[1;31mThis is red text\e[0m

Mengapa mereka bertindak berbeda?

qingfeng
sumber

Jawaban:

29

echoadalah shell builtin di Bash and dash ( /bin/sh). Jika Anda menjalankan echodari baris perintah Anda menggunakan Bash builtin, jika Anda menjalankan skrip shell shAnda dengan Anda menggunakan Dash builtin.

Versi dasbor dari echotidak tahu -eopsi tetapi hanya mengeluarkan sesuatu kata demi kata tanpa penanganan khusus untuk \urutan.

Gunakan Bash untuk menjalankan skrip shell Anda, atau gunakan /bin/echoalih-alih echo:

/bin/echo -e "\e[1;31mThis is red text\e[0m"

Untuk menghindari masalah dengan versi berbeda, echoAnda mungkin ingin menggunakannya printf. Berbeda dengan echo printfselalu menginterpretasikan \urutan tetapi tidak secara otomatis menambahkan linefeed di akhir sehingga Anda harus menambahkan \ndi akhir jika Anda menginginkannya.

Karena beberapa versi printftidak mengerti, \eAnda sebaiknya menggunakan \033:

printf "\033[1;31mThis is red text\033[0m\n"
Florian Diesch
sumber
Berhasil. /bin/echodengan tanda hubung ( /bin/sh) dan bash; echodengan bash atau ./tes.shkeduanya berfungsi dengan benar. Kode di bawah ini bashhanya berfungsi dengan . if [$ UID -ne 0]; lalu gema "Bukan root pengguna" lain gema "Root User" fi
qingfeng
1

Jangan jalankan dengan sh test.sh, itu mencetak teks dalam warna putih seperti yang Anda katakan ..Setelah membuat skrip, membuatnya dapat dieksekusi dengan menjalankan,

sudo chmod +x /path/test.sh

masukkan deskripsi gambar di sini

Jalankan skrip dengan sudo, suka sudo ./test.shatau ./test.shkeduanya akan berfungsi.

Atau

Jalankan skrip dengan bash,

bash /path/test.sh
Avinash Raj
sumber
Saya jalankan chmod a+x test.sh, itu mencetak teks dalam warna baca. Apa bedanya. ./test.shharus sama dengan sh test.shApa yang terjadi di linux?
qingfeng
Anda tidak harus menggunakan sh saat menjalankan skrip, Anda telah membuat skrip dengan bash interpreter #! /bin/bashsehingga Anda harus menggunakannyabash test.sh
Avinash Raj
Dan juga .berarti direktori saat ini.
Avinash Raj
Lihat tangkapan layar, file test.sh saya ditempatkan di dalam desktop. Jadi saya pindah ke folder desktop itu dan kemudian saya jalankan ./test.sh, akhirnya berhasil. Harap diingat menjalankan skrip dengan .hanya jika disajikan di dalam direktori saat ini.
Avinash Raj
1

Ini perlu perintah yang benar dalam format yang benar semua.

Pernyataan gema yang tepat: echo "Hello World!"

Pernyataan gema yang tepat dengan warna: echo "\e[1;31mHello World!\e[0m"

Menambahkan warna ke skrip bash adalah salah satu dari hal-hal yang sangat sederhana namun mudah membingungkan. =)

Situs ini dapat membantu menjelaskan semuanya dengan jelas kepada Anda. Saya sering menggunakannya sebagai referensi karena, siapa yang bisa mengingat semua kode warna yang benar bukan? LOL

hwac121
sumber