Kann ich .bashrc verwenden, um ls Farben unter OS / X und Linux anzeigen zu lassen?

8

Ich führe OS / X auf meinem PC und Linux auf meinen Remote-Servern aus. (Ich konnte mir noch nie einen Xserve leisten, als sie noch hergestellt wurden.) Ich würde gerne dieselbe .bashrc-Datei für beide verwenden, und ich möchte, dass ls mir Farben anzeigt, damit ich ausführbare Dateien, Verzeichnisse und die mögen.

Aber die GNU lsunter Linux möchte den --colorsBefehlszeilenschalter sehen, oder sie weigert sich, Farben anzuzeigen. Apple (BSD?) lsLiefert es, die export CLICOLORS=1Shell-Variable zu sehen, damit sie Farben anzeigt.

Ich würde beides tun, aber die Apple- lsBarfs, wenn sie einen unbekannten --colorsSchalter sehen.

Gibt es in .bashrc eine gute Möglichkeit, zu erkennen, ob lsein Switch akzeptiert wird, und dann zu entscheiden, ob ein Alias ​​verwendet werden soll --colorsoder nicht?

Brian
quelle
2
brew install coreutils... und dann /usr/local/Cellar/coreutils/*/libexec/gnubin Ihrem PFAD voranstellen .
Muru

Antworten:

8

Wenn Sie versuchen, etwas Portables zu tun, testen Sie auf Funktionen, nicht auf Plattformen:

if ls --help 2>&1 | grep -q -- --color
then
    alias ls='ls --color=auto -F'
else
    alias ls='ls -FG'
fi

Plattformtests werden unterbrochen, wenn sich die Plattform ändert. macOS liefert heute eine Mischung aus BSD- und GNU-Userland-Tools aus, aber diese Mischung verschiebt sich im Laufe der Zeit hin zu einem größeren Übergewicht an BSD-Tools. Ein Test für "macOS" von heute kann daher morgen fehlschlagen, wenn Apple ein GNU-Tool, von dem Sie abhängig waren, durch das nächstgelegene BSD-Äquivalent ersetzt, wenn Sie sich auf eine Funktion verlassen, die die beiden unterschiedlich implementieren. Funktionstests funktionieren angesichts von Änderungen häufiger.

Als Bonus erstellen Sie manchmal Unterstützung für Plattformen, gegen die Sie ursprünglich nicht getestet haben. Das obige Skriptfragment sollte beispielsweise auch unter Solaris und FreeBSD das Richtige tun.

(Dies ist übrigens die Philosophie hinter GNU Autoconf, weshalb ein configurevor 10 Jahren geschriebenes Skript wahrscheinlich noch heute auf einem brandneuen System funktioniert.)

Ändern Sie die Aliase entsprechend. Ich zeige nur die Werte, die ich auf den MacOS- und Linux-Systemen verwende, die mir beim Schreiben am nächsten liegen.

Warren Young
quelle
1
Das ist eine sehr interessante Idee, von der ich noch nie gehört habe, die mir aber im Laufe der Jahre viel Schmerz erspart hätte, wenn ich verschiedene Aliase auf dem neuesten Stand gehalten hätte. Vielen Dank.
Tim Kennedy
2

Sie können überprüfen, ob es sich um Linux handelt, und es dann einstellen ls. dh:

export CLICOLORS=1
if uname -a | grep Linux >/dev/null; then
  # your linux ls stuff
fi
rsm
quelle