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?

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"

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.