[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: farbige Bashausgabe drucken...



Hi, 

> Ich möchte eine farbige Bash-Ausgabe (wheezy) in SW drucken
> (todo.txt).
> 
> Problem: Ein »todo.sh ls | lpr« druckt den Nummerncode der jeweiligen
> Farbe mit. Beispiel:

Kleine Sache vorweg nur btw: wieso hat ein Bash-Script eine .sh-Endung?
Bist du sicher, dass es ein bash- und kein sh-script ist? (wird von der
ersten Zeile definiert: #!/bin/sh oder #!/bin/bash)

Prinzipiell sollte man bei ausführbaren Dateien auf Endungen
verzichten. (Oder rufst du auch ls.bin auf?)

> [38;5;121m18 (B) Wegwarten umpflanzen [1;34m [0m[38;5;121m[0m
> 
> Ich möchte entweder eine Ausgabe in SW ohne Nummerncode, oder die
> Ausgabe wäre tatsächlich farbig (und würde dann halt in Graustufen
> gedruckt).

Bessere wäre es, das Problem von anderer Seite anzugehen. Eigentlich
sollte ein Tool schon nur dann Farbcodes ausgegeben, wenn es auf ein
Terminal schreibt. In bash kannst du das mit [[ -t 1 ]] testen, in sh
mit [ -t 1 ].

Ich gehe davon aus, dass du deine Farbcodes mit tput setzt? Diese
Anweisung solltest du, wenn du nicht auf einem tty bist, mit einem
alias überschreiben, so dass es nichts tut.

Beispiel:

--- SNIP ---
#!/bin/sh
[ -t 1 ] ||  alias tput=:
tput setaf 5
echo foo
tput setaf 6
echo bar
tput setaf 7
echo bla
--- SNAP ---

Wenn du anstatt sh bash nutzt, sollten die Zeilen so aussehen:

#!/bin/bash
[[ -t 1 ]] || alias tput=:


Wenn du dieses Script direkt im Terminal ausführst, z.B.
mit ./colortest, dann solltest du die Farben sehen. Wenn du stattdessen
in ein Pipe (./colortest | cat) oder eine Datei (./colortest > out)
schreibst, sind keine Farben mehr drin.

Liebe Grüße,
Micha


Reply to: