2013-07-12 23 views
7

Sorry, die Überschrift könnte ein bisschen irritierend sein, aber ich wusste nichts besseres. Wie auch immer, ich möchte, dass ein Bash-Skript auf FreeBSD, OpenBSD und Linux funktioniert, ohne es zu modifizieren, aber bash befindet sich nicht an derselben Stelle in Linux und BSD.Wie bekomme ich ein Bash-Skript, das auf FreeBSD, OpenBSD und Linux funktioniert, ohne es zu modifizieren?

Also, wenn ich schreibe #!/bin/bash dann wird es nicht auf BSD arbeiten, weil die Bash-Shell befindet sich in /usr/local/bin/bash dort. Gibt es eine Lösung, um dieses Skript an beiden zu arbeiten?

Oder muss ich wirklich zwei Skripte mit unterschiedlichen Pfaden versenden ...?

+3

Beachten Sie auch, dass es bei einem FreeBSD-System * keine Garantie gibt, * dass bash überhaupt verfügbar sein wird, es ist eine optionale Installation ... – fvu

Antwort

12

Mit env in der Shebang (#!/usr/bin/env bash) sollte das Skript OS Agnostiker machen.

1

Ich mag die Antwort über die Verwendung #!/usr/bin/env bash Es ist eine interessante und ausgezeichnete Antwort, aber das würde nur funktionieren, wenn Bash im Pfad ist.

Eine andere Option könnte sein, #!/bin/sh zu verwenden, die die universell kompatible Shell-Position ist. Dann haben Sie das Skript etwas in sh tun, wie zum Beispiel prüfen, wo bash installiert ist (wenn bash sogar installiert ist). Eine andere Option könnte sein, dass bash für beide Standorte existiert. Das Erstellen einer anderen Installation mag wie Overkill klingen, aber dieses Ziel könnte genauso einfach erreicht werden wie das Erstellen einer festen Verbindung, so dass Bash tatsächlich an beiden Orten existiert.