Ho un file con i colori ANSI.
test.txt:
\e[0;31mExample\e[0m
Vorrei visualizzare il contenuto di questo file in un terminale, come cat
fa, ma vorrei visualizzare anche i colori.
cat
stampa?
echo -e $(cat test.txt)
.
Ho un file con i colori ANSI.
test.txt:
\e[0;31mExample\e[0m
Vorrei visualizzare il contenuto di questo file in un terminale, come cat
fa, ma vorrei visualizzare anche i colori.
cat
stampa?
echo -e $(cat test.txt)
.
Risposte:
Stavo cercando una soluzione a questa esatta domanda bash. Ho quasi perso il commento di @Thomas Dickey che mi ha fornito la soluzione più elegante.
echo -e $(cat test.txt)
Alcune cose che non hanno funzionato per me sono (apparentemente non puoi incanalare le cose per fare eco)
cat test.txt | echo -e
o
less -R test.txt
Un altro problema che ho avuto è stato che l'eco non ha stampato correttamente nuove righe e spazi bianchi contigui all'interno del file. Per stampare quelli, ho usato il seguente.
echo -ne $(cat test.txt | sed 's/$/\\n/' | sed 's/ /\\a /g')
Funziona con un file test.txt contenente
\e[0;31mExa mple\e[0m
\e[0;31mExample line2\e[0m
\a
suona il campanello per me. Ho cambiato il tuo secondo comando sed a sed 's/ /\\033\\a /g'
cui non suona il campanello.
$(cat file.txt)
tra virgolette doppie e aggiungere una nuova riga alla fine - non c'è bisogno di sed - così: echo -ne "$(<file.txt)" \\n
o echo -ne "$(cat <<"EOF" . . . EOF)" \\n
. Ciò impedisce anche a bash di eseguire l'espansione glob nel testo.
Se non vedi il colore dai cat
caratteri di controllo, probabilmente non sono intatti.
Alcuni strumenti rimuovono i personaggi di controllo ma ne lasciano la coda.
Confrontare:
echo -e "\e[0;31mExample\e[0m foo"
per
echo -e "[0;31mExample[0m foo"
Potresti essere in grado di ricostruire la sequenza di controllo da ciò che resta, anche se non è infallibile poiché la regex che usi potrebbe accidentalmente trascinare sequenze di caratteri non intenzionali, ecc. Ma per esempio:
echo -e "[0;31mExample[0m foo" | sed "s:\[\([0-9]*[;m]\):^[[\1:g"
ripristinerebbe il colore nella stringa di esempio.
Dovrebbe funzionare di default. Ad esempio, se lo faccio ls --color=always > /tmp/a
e poi cat /tmp/a
, vedo i colori. Il controllo con od
conferma che il file utilizza i colori ANSI.
Quindi penso che dovresti controllare se il tuo terminale supporta i colori ANSI (e sono abilitati).
less -R
, per esempio.