Gibt es irgendwelche Optionen, um cat mit Farbe ausgeben zu lassen?

Antworten:

18

Ein GNU-Paket, source-highlight , scheint das Problem zu lösen (obwohl cat nicht verwendet wird - wie John T betont, ist dies mit cat nicht möglich). Es ist über apt-get auf Ubuntu verfügbar und benötigt die Boost-Regex-Bibliothek. Überprüfen Sie bei Ihrem Paketmanager, ob beide verfügbar sind. Andernfalls können Sie sie aus dem Internet abrufen. Die zuvor verlinkte GNU-Seite hat einen Link zu Boost, denke ich.

Nach der Installation habe ich in meinem Pfad ein neues Skript namens ccat erstellt . Das Skript sieht folgendermaßen aus:

#!/bin/bash
src-hilite-lesspipe.sh $1

Nichts Besonderes, Vereinfachung nur die weniger Skript sie mit source-highlight umfassen. Es verhält sich wie eine Katze, wenn man es so nennt.

Das mitgelieferte less-Skript ist jedoch auch ein gutes Skript. Ich habe gerade Folgendes zu .bashrc hinzugefügt :

export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
export LESS=' -R '

Dieses Skript ist auch im Online-Handbuch für Source-Highlight enthalten.

Ich vermute, Sie könnten auch cat als src-hilite-lesspipe.sh $ 1 bezeichnen, wenn Sie Lust hätten, cat komplett zu ignorieren, aber das ist vielleicht nicht wünschenswert.

rgm
quelle
4
Ich persönlich bevorzuge ein Alias ​​gegenüber einzeiligen Bash-Skripten, die mit $1:) enden .
mgalgs
Ja, Mitch_Feaster, du bist genau richtig. :]
rgm
2
Funktioniert auch auf einem Mac mit brew install source-highlight. Yaml kann nicht eingefärbt werden :(
Sairam
9

Um syntaktisch hervorgehobenen Code mit so etwas wie auszugeben cat, habe ich einen ccatBefehl erstellt, indem ich den Anweisungen unter http://scott.sherrillmix.com/blog/programmer/syntax-highlighting-in-terminal/ gefolgt bin .

#!/bin/bash
if [ ! -t 0 ];then
  file=/dev/stdin
elif [ -f $1 ];then
  file=$1
else
  echo "Usage: $0 code.c"
  echo "or e.g. head code.c|$0"
  exit 1
fi
pygmentize -f terminal -g $file

Um syntaktisch hervorgehobenen Code mit so etwas wie auszugeben less, verwende ich vim als weniger Ersatz.

alias less='/usr/share/vim/vim72/macros/less.sh'
michaelvobrien
quelle
So installieren Sie pygementize: easy_install --install-dir $ SOMEDIR Pygments
psihodelia
Ich mag diese Art von tragbaren Lösungen. Ich habe dieses Skript als eine Funktion zu meiner Bash .functionsalscolorize(){...}
guneysus
3

Um dies zu lösen, habe ich Highlight verwendet . Ich habe eine Funktion erstellt, mit der versucht wird, die Datei mit Syntaxhervorhebung zu drucken. Wenn dies fehlschlägt, wird lediglich cat zum Drucken der Datei verwendet. Sie können das Thema für die Syntaxhervorhebung nach Belieben ändern.

function hl { # Overrides the cat command to use syntax highlighting
    # Highlight with 'moria' theme to terminal, and suppress errors
    highlight $1 -s moria -O xterm256 2> /dev/null

    if (($? != 0)); then # If the command had errors
        cat $1 # Just cat the file out instead
    fi
}

Wenn Sie auf einem Mac arbeiten und Homebrew verwenden (sehr zu empfehlen!), Können Sie highlight durch Ausführen von installieren brew install highlight. Andernfalls sollte es auf den meisten anderen Paketmanagern verfügbar sein und kann hier heruntergeladen werden .

Ich habe auch eine Funktion zum Ausdrucken einer Datei mit Syntax-Hervorhebung als HTML erstellt und zum Ausdrucken im Browser geöffnet (stützt sich auf den openBefehl unter OS X):

function hlprint {
    # Print with line numbers and 'moria' theme
    highlight $1 -l -o print.html -s moria
    open print.html # Open in browser
    sleep 5 # Give the browser time to open
    rm print.html highlight.css # Remove output files
}

Genießen!

Kevin
quelle
1

Nein, cat hat keine Fähigkeiten zum Hervorheben von Syntax. Wenn Sie den Quellcode mit Syntaxhervorhebung anzeigen möchten, öffnen Sie ihn in vim oder in einem Editor Ihrer Wahl (mit Syntaxhervorhebung). Auf diese Weise können Sie sogar mit Ctrl+ F(vorwärts) und Ctrl+ B(rückwärts) durch die Ausgabe blättern, wenn es sich um eine lange Datei handelt .

John T
quelle