
Ich möchte die farbige Textausgabe bei SSH-Einzeilerbefehlen aktivieren, aber ich kriege es unter OS X, Ubuntu 14.10 oder OpenSUSE 12.2 nicht hin.
Wenn ich mich per SSH mit einem Server verbinde und beispielsweise ls --color=auto
in die Eingabeaufforderung eingebe, funktioniert es einwandfrei und zeigt Verzeichnisse, symbolische Links und normale Dateien in unterschiedlichen Farben an. Wenn ich den Befehl jedoch in einer SSH-Einzeilerzeile auf demselben System eingebe: ssh user@host "ls --color=auto"
, ist die Ausgabe nicht farbig.
Durch die Eingabe echo $TERM
erfahre ich xterm-256color
, ob ich es in eine einzeilige Anweisung eingefügt habe oder nicht.
Dies dient hauptsächlich der Farbcodierung von Fehlern und Warnungen bei Remote-Builds, aber es wäre schön, es für alles aktiviert zu haben.
Irgendein Rat?
Antwort1
ssh user@host "ls --color=auto"
ls
gibt nur Farben aus, wenn es auf ein Terminal schreibt. Wenn Sie einen Befehl angeben, der ssh
auf dem Remote-Host ausgeführt werden soll, weist ssh standardmäßig kein TTY (Terminalschnittstelle) zu. Wenn Sie also den obigen Befehl ausführen, weist ssh auf dem Remote-System kein Terminal zu, ls erkennt, dass nicht auf ein Terminal geschrieben wird, und gibt keine Farben aus.
Sie können ssh mit der Option ausführen, -t
ein Terminal zuzuweisen. Folgendes sollte Farben drucken:
ssh -t user@host "ls --color=auto"
Wenn ssh
es nicht interaktiv ausgeführt wird und seine eigene lokale Ausgabe nicht an ein Terminal geht, wird ein einzelnes -t
Flag ignoriert. In diesem Fall können Sie -t
mehr als einmal angeben, um SSH zu zwingen, ein TTY auf dem Remote-System zuzuweisen:
ssh -tt user@host "ls --color=auto"
Antwort2
Ich würde vorschlagen, --color=always
im Fall von ls zu verwenden, um Farbe zu erzwingen. Und um Farben in anderen Apps zu haben, die Farbgebung unterstützen, aber nicht für --color=value
, können Sie auch versuchen,ssh <host> -t "TERM=${TERM} <command>"