2013-07-19 7 views
6

Ich habe herumgeschaut, um das zu finden, aber ich konnte nichts von der Hand finden. Ich bin sicher, die Antwort ist einfach.Gibt es eine Möglichkeit, ein Shell-Skript dazu zu zwingen, unter bash statt sh zu laufen?

Ich schreibe einige Shell-Skripte für verschiedene Zwecke von verschiedenen Leuten ausgeführt werden, und einige von ihnen können das Skript mit "SH" anstelle von "Bash" aufrufen.

Das Skript enthält Werkzeuge, die nicht in der regulären Shell-Umgebung funktionieren und bash benötigen - gibt es eine Möglichkeit, das Skript unter bash auszuführen, obwohl es mit "sh" aufgerufen wurde?

+0

@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). –

+0

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

Antwort

24

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.)

+0

Vielen Dank für die Antwort. Ich habe die Zeile oben angegeben, und ich wusste nicht, dass ich Bash-Versionen überprüfen könnte, um einen Fehler zu werfen. Das wird gut, danke! – Locane

+0

Oft können andere Shells (wie ksh oder zsh) funktionieren. Vielleicht möchten Sie auch nach ihnen suchen. – Demi

2
#! /bin/bash 
# The rest of your script. 
Verwandte Themen