Portable Shell-Skripte bauen

SolarCatcher

Well-Known Member
Bisher habe ich kleine Shellskripte immer nur für mich selbst gebaut. Jetzt will jemand anderes meines unter Linux verwenden und da kommt das erste Problem:

Ich habe an mehreren Stellen "stat -f %z" und "stat -f %m" verwendet, um die Größe bzw. Änderungszeit einer Datei zu ermitteln. Auf einem GNU/Linux benötigt man dafür andere Parameter, "stat -c %s" bzw. "stat -c %Y".

Wie geht man da vor? Schiebt man eine Abfrage rein, um zu sehen ob BSD- oder GNU-Tools verwendet werden?

Und: Gibt es irgendwo eine Übersicht, mit der man Infos für die Parameter der wichtigsten UNIX-Tools auf verschiedenen Plattformen hat? Zumindest über Abweichungen voneinander?
 
Wie geht man da vor?
Ernst gemeinte Antwort: Man nimmt Python. Shell-Script ist schon zwischen verschiedenen Shells nicht wirklich portabel, zwischen verschiedenen Plattformen wird es schnell die Hölle. Wenn es denn wirklich in Shell sein muss, definierte ich statt der direkten Kommandos Variablen, die in Abhängigkeit der Shell und des Systems gesetzt werden.
 
Wie geht man da vor? Schiebt man eine Abfrage rein, um zu sehen ob BSD- oder GNU-Tools verwendet werden?
Wenn du bei der Shell bleiben willst, überprüfe einfach via "uname -s" das grundlegende System, die Unterschiede der einzelnen Parameter musst du dir über die entsprechenden Manpages auf den Plattformen selbst raussuchen.

Rob
 
Ernst gemeinte Antwort: Man nimmt Python.

Nä, Perl. Pythoncode stellt sich oft als leicht zu lesen, aber grausam zu warten heraus - also das genaue Gegenteil von Perl. :)
Zumal Perl aus gutem Grund auf vielen Systemen schon vorhanden ist, Python hingegen eher nicht. (Und dann wäre da noch die Frage: 2 oder 3? ;))
 
perl4 oder 5 oder 6?

Generell ist der Punkt von Yamagi (und quasi Crimson) aber richtig, es wurden schon genug "Abstraktionen" geschrieben.

Ein "shell" script portabel zu bauen (nur builtins) ist schon schwer genug, dazu dann noch alle unterschiedlichen Aufrufe (ob nun command und/oder optionen) - herzlichen...
 
Zurück
Oben