Il comando Eco con l'opzione colore nello script e il comando funziona in modo diverso


15

Se corro echo -e "\e[1;31mThis is red text\e[0m"nella riga di comando, stampa il testo rosso.

Tuttavia, se uso scriverlo nel file di script test.sh

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

correre $ sh test.sh

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

Perché agiscono diversamente?

Risposte:


29

echoè una shell integrata in Bash e dash ( /bin/sh). Se esegui echodalla riga di comando che stai utilizzando l'integrato di Bash, se stai eseguendo lo script della shell con shte stai utilizzando l'integrato di Dash.

La versione trattata di echonon conosce l' -eopzione, ma produce semplicemente qualcosa di testuale senza alcuna gestione speciale per le \sequenze.

Utilizzare Bash per eseguire lo script della shell oppure utilizzare /bin/echoinvece di echo:

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

Per evitare i problemi con diverse versioni di echote, potresti voler usare printfinvece. Al contrario, echo printfinterpreta sempre le \sequenze ma non aggiunge automaticamente un avanzamento di riga alla fine, quindi è necessario aggiungere \nalla fine se ne si desidera uno.

Poiché alcune versioni di printfnon capiscono \e, dovresti usare \033invece:

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

Funziona. /bin/echocon trattino ( /bin/sh) e bash; echocon bash o ./tes.shentrambi funzionano correttamente. Il codice seguente funziona bashsolo con . if [$ UID -ne 0]; quindi echo "Utente non root" altrimenti echo "Utente root" fi
qingfeng

1

Non eseguirlo con sh test.sh, stampa il testo in bianco come hai detto ... Dopo aver creato lo script, rendilo eseguibile eseguendo,

sudo chmod +x /path/test.sh

inserisci qui la descrizione dell'immagine

Esegui lo script con sudo, come sudo ./test.sho ./test.shentrambi funzioneranno.

O

Esegui lo script con bash,

bash /path/test.sh

Corro chmod a+x test.sh, stampa il testo a colori letti. Qual è la differenza. ./test.shdovrebbe essere uguale a sh test.shquello che è successo in Linux?
Qingfeng,

non hai dovuto usare sh durante l'esecuzione dello script, hai creato lo script con l'interprete bash #! /bin/bashquindi devi usarlobash test.sh
Avinash Raj

E .significa anche directory corrente.
Avinash Raj,

Guarda lo screenshot, il mio file test.sh è posizionato all'interno del desktop, quindi sono passato a quella cartella del desktop e poi ho eseguito ./test.sh, finalmente funziona. Tieni presente che esegui lo script .solo se è stato presentato nella directory corrente.
Avinash Raj,

1

Ciò richiede il comando corretto nel formato corretto è tutto.

Dichiarazione di eco corretta: echo "Hello World!"

Dichiarazione di eco corretta con colore: echo "\e[1;31mHello World!\e[0m"

L'aggiunta di colore a uno script bash è una di quelle cose molto semplici ma facilmente confuse. =)

Questo sito potrebbe aiutarti a spiegarti tutto chiaramente. Lo uso spesso come riferimento perché, chi può ricordare tutti i codici colore corretti giusto? LOL

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.