Aufgrund meiner Arbeit habe ich kürzlich angefangen, OS X zu verwenden und habe es mit Homebrew eingerichtet, um eine ähnliche Erfahrung wie mit Linux zu erzielen.
Es gibt jedoch einige Unterschiede in ihren Einstellungen. Einige müssen nur auf einem System vorhanden sein. Da meine Punktedateien in einem Git-Repository gespeichert sind, habe ich mich gefragt, welche Art von Schalter ich einrichten könnte, sodass einige Konfigurationen nur für Linux-Systeme und andere für OS X gelesen werden.
Bezüglich Punktedateien beziehe ich mich unter anderem auf .bash_profiles
oder .bash_alias
.
if (exists rcfile.local); source rcfile.local; endif
, in die entsprechende rc-Datei übersetzt zu werden. Die Haupt-RC-Datei versuche ich systemunabhängig zu halten, während die.local
Version systemspezifische Einstellungen hat. Wenn Sie alles in einem einzigen Repository haben möchten, können Sie Systemverzeichnisse haben und die Datei rcfile.local mit der Datei im richtigen Verzeichnis verknüpfen.Antworten:
Halten Sie die Punktedateien so portabel wie möglich und vermeiden Sie betriebssystemabhängige Einstellungen oder Schalter, die eine bestimmte Version eines Tools erfordern. Vermeiden Sie z. B. die GNU-Syntax, wenn Sie GNU-Software nicht auf allen Systemen verwenden.
Sie werden wahrscheinlich in Situationen geraten, in denen es wünschenswert ist, systemspezifische Einstellungen zu verwenden. In diesem Fall verwenden Sie eine switch-Anweisung mit den einzelnen Einstellungen:
Falls die Konfigurationsdateien beliebiger Anwendungen unterschiedliche Optionen erfordern, können Sie prüfen, ob die Anwendung Kompatibilitätsschalter oder andere Mechanismen bietet. Für
vim
zum Beispiel können Sie die Version überprüfen und Patchlevel zu Unterstützung bietet ältere Versionen oder Versionen mit einem anderen Feature - Set zusammengestellt, nicht hat. Beispiel-Snippet von.vimrc
:quelle
uname -s
ist wieuname
. uname steht für unix name.-s
?uname
allein ist seit Jahrzehnten der kanonische Weg und wird von POSIX vorgegeben. Das Originaluname
(in PWB Unix) hat keine Option gewählt.-s
diese Antwort entfernt und ich werde sie für meine zukünftigen Skripte im Hinterkopf behalten.set
wirklich U + 201C und U + 201D und nicht U + 0022 sein?Wenn Sie sich nur mit Dateien befassen, die tatsächlich ausgeführt werden, wie z. B. .bash_profiles und friends, können Sie möglicherweise nicht mehr z. B.
uname
anhand des Systems, auf dem der Code ausgeführt wird, differenzieren.Zum Beispiel völlig ungetestet und mit dem Vorbehalt, dass ich kein OS X zum Ausprobieren habe, wenn Sie momentan unter Linux arbeiten:
und unter Mac OS X:
(Wo
-x
lässt OS Xls
etwas machen, was GNU standardmäßig macht), dann können sie zu so etwas kombiniert werden:Die einzige Voraussetzung ist dann, dass dies
uname -s
größtenteils auf die gleiche Weise funktioniert (dies sollte der Fall sein, da beide Systeme vernünftigerweise POSIX-y und uname -s sind (danke Marco für den Hinweis )) und die Syntax für die Verzweigung von Shell-Skripten basierend auf einem String-Vergleich ist das gleiche. Sie können wahrscheinlich auch anhand anderer Kriterien testen. Sie könnten zB nach / etc / lsb_release suchen, prüfen, ob / proc / sys / kernel / ostype "Linux" enthält oder welche anderen Tests Sie sich vorstellen können.quelle
Darwin
, ich habe gerade nachgesehen.-o
Schalter ist kein POSIX-Schalter und fällt auf vielen Systemen aus, z. B. Solaris.-s
ist unter POSIX obligatorisch und die kompatibelste Methode. IEEE Std 1003.1OSTYPE
ist in einer POSIX-Shell nicht verfügbar. Es schlägt beispielsweise bei einer FreeBSD-Standardinstallation fehl und kann nur in.bashrc
oder verwendet werden.zshrc
. Es funktioniert nicht zuverlässig.profile
,.alias
usw. Da reden wir über Unverträglichkeiten hier, ich empfehlen würde den sicheren Weg zu gehen, statt auf bestimmte Shell-Funktionen zu verlassen, die auf jedem System verfügbar sein nicht garantiert werden.