As Richard Pennington says, der richtige Weg, das zu tun ist
#!/bin/bash
als die erste Zeile des Skripts zu haben.
Aber das wird nicht helfen, wenn Benutzer es explizit mit sh
aufrufen. wenn ich zum Beispiel, geben Sie
sh your-script-name
die #!
Linie ignoriert.
Sie können nicht wirklich verhindern Menschen aus, das zu tun, aber man kann es entmutigen durch so etwas wie dies am Anfang des Skripts hinzu:
#!/bin/bash
if [ ! "$BASH_VERSION" ] ; then
echo "Please do not use sh to run this script ($0), just execute it directly" 1>&2
exit 1
fi
Oder man so etwas tun könnte:
#!/bin/bash
if [ ! "$BASH_VERSION" ] ; then
exec /bin/bash "$0" "[email protected]"
fi
aber das könnte sehr leicht sehr falsch gehen; Zum Beispiel ist es wahrscheinlich nicht garantiert, dass $0
, normalerweise der Name des Skripts, tatsächlich ein Name ist, den Sie verwenden können, um es aufzurufen. Ich kann mir vorstellen, dass dies zu einer Endlosschleife führt, wenn Sie es falsch verstehen oder wenn Ihr System leicht falsch konfiguriert ist.
Ich empfehle die Fehlermeldung Ansatz.
(Anmerkung: Ich habe gerade diese Antwort bearbeitet, so dass die Fehlermeldung den Namen des Skripts enthält, die für die Nutzer hilfreich sein könnte.)
@shellter: Ich denke du meinst '/ usr/bin/env ', nicht'/bin/env'; Mein System hat zum Beispiel kein '/ bin/env'. Siehe auch [diese Frage] (http://unix.stackexchange.com/q/29608/10454) und [meine Antwort] (http://unix.stackexchange.com/a/29620/10454). –
Ich glaube, dass diese Frage nützlich ist und sich immer noch an die Regeln halten kann, z.B. nicht off-topic, wenn es nur auf "Wie ändere ich mein Skript geändert, um es unter bash anstelle von sh auszuführen zwingen?" (so ziemlich wie Titel) – Programster