webentwicklung-frage-antwort-db.com.de

Führen Sie das Bash-Skript mit sh aus

Ich habe Bash-Skript und es erfordert Bash.

Eine andere Person versucht es mit laufen zu lassen

sh script_name.sh

Und es scheitert daran, dass sh eine symbolische Verbindung ist, um in seiner Distribution zu brechen.

$ ls -la /bin/sh
lrwxrwxrwx 1 root root 4 Aug 25 16:06 /bin/sh -> dash

Ich habe eine Idee, ein Wrapper-Skript zu verwenden:

#!/bin/sh
bash script_name.sh

Das Ziel ist es, ein .sh-Skript von sh mit bash im System auszuführen, das eine symbolische Verknüpfung zum Bindestrich hat.

16
Lemon Tree

Normalerweise verwenden Sie Shebang , um die Shell anzuweisen, den richtigen Interpreter zu verwenden:

#!/bin/bash

# your script here

Sie müssen das Skript so einstellen, dass es ausführbar ist:

chmod +x my_script.sh

Und lassen Sie den Benutzer damit beginnen:

./my_script.sh

Es scheint einfach, als ein Wrapper-Skript zu verwenden.

Sie können jbr test verwenden, um Ihr Skript mit bash auszuführen, auch wenn der Benutzer sh/dash oder einen sh-ähnlichen Interpreter verwendet:

#!/bin/bash

if [ -z "$BASH_VERSION" ]
then
    exec bash "$0" "[email protected]"
fi

# Your script here

Auf diese Weise funktioniert es richtig mit entweder:

sh ./my_script.sh

# or

bash ./my_script.sh

# or

./my_script.sh
31
neuro

In Ihrem Skript können Sie vor allem Folgendes tun:

if [ "$BASH" != "/bin/bash" ]; then
  echo "Please do ./$0"
  exit 1
fi

oder der allgemeinere Weg ist die Verwendung von $BASH_VERSION:

if [ -z "$BASH_VERSION" ]; then
  echo "Please do ./$0"
  exit 1
fi
4
jbr