Komut dosyasında ve komutta renk seçeneğiyle yankı komutu farklı çalışır


15

Ben echo -e "\e[1;31mThis is red text\e[0m"comand satırında koşarsam, kırmızı metin yazdırır.

Ancak, ben bunu komut dosyasında yazmak kullanırsanız test.sh

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

Çalıştırmak $ sh test.sh

Çıktı -e \e[1;31mThis is red text\e[0m

Neden farklı davranıyorlar?

Yanıtlar:


29

echoBash ve dash ( /bin/sh) ' de bir kabuk yerleşmesidir . echoKomut satırından çalıştırırsanız , Bash yerleşimini, kabuk betiğinizi çalıştırıyorsanız shDash yerleşimini kullanırsınız.

Tire sürümü seçeneği echobilmiyor -eama \diziler için herhangi bir özel işlem yapmadan kelimesi kelimesine çıktı veriyor .

Kabuk betiğinizi çalıştırmak için Bash kullanın veya aşağıdakiler /bin/echoyerine kullanın echo:

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

Farklı sürümlerinizle ilgili sorunları önlemek echoiçin kullanmak isteyebilirsinizprintf bunun yerine . Bunun aksine, dizileri echo printfher zaman yorumlar, \ancak sonunda otomatik olarak satır besleme eklemez, böylece isterseniz sonuna eklemeniz gerekir \n.

Bazı sürümleri printfanlamıyor \e, \033bunun yerine kullanmalısınız :

printf "\033[1;31mThis is red text\033[0m\n"

İşe yarıyor. /bin/echotire ( /bin/sh) ve bash ile; echobash veya ./tes.shher ikisi ile doğru çalışıyor. Aşağıdaki kod bashyalnızca şununla çalışır: eğer [$ UID -ne 0]; sonra yankı "Kök kullanıcı değil" başka yankı "Kök Kullanıcı" fi
qingfeng

1

Bunu çalıştırmayın sh test.sh, metni dediğin gibi beyaz renkte yazdırır. Betiği oluşturduktan sonra çalıştırarak çalıştırılabilir hale getirin,

sudo chmod +x /path/test.sh

resim açıklamasını buraya girin

İle komut dosyasını çalıştırın sudogibisudo ./test.sh veya ./test.shher ikisi de çalışır.

Veya

Komut dosyasını ile çalıştır bash,

bash /path/test.sh

Ben koşmak chmod a+x test.sho okuma renkli metin yazdırmak. Fark ne. Linux'ta ne oldu ./test.sheşit olmalı sh test.sh?
qingfeng

Senaryoyu çalıştırırken sh kullanmak zorunda değilsin, senaryoyu bash tercümanıyla oluşturdun, #! /bin/bashbu yüzden kullanmalısınbash test.sh
Avinash Raj

Ayrıca .geçerli dizin anlamına gelir.
Avinash Raj

Ekran görüntüsüne bakın, test.sh ./test.shdosyam masaüstüne yerleştirildi.Bu yüzden o masaüstü klasörüne taşındım ve sonra çalışıyorum , nihayet işe yarıyor ..
Avinash Raj

1

Bu doğru formatta doğru komutu gerektirir hepsi.

Uygun yankı ifadesi: echo "Hello World!"

Renk ile uygun yankı ifadesi: echo "\e[1;31mHello World!\e[0m"

Bir bash betiğine renk eklemek, bu çok basit ama kolayca kafa karıştırıcı şeylerden biridir. =)

Bu site size her şeyi açık bir şekilde açıklamaya yardımcı olabilir. Sık sık referans olarak kullanıyorum, çünkü doğru renk kodlarını kim hatırlayabilir? LOL

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.