web-dev-qa-db-ja.com

shを使用してbashスクリプトを実行する

Bashスクリプトがあり、bashが必要です。

別の人がそれを実行しようとします

sh script_name.sh

また、shは彼のディストリビューションのダッシュへのシンボリックリンクであるため失敗します。

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

ラッパースクリプトを使用するアイデアがあります。

#!/bin/sh
bash script_name.sh

目標は、ダッシュへのシンボリックリンクを持つシステムで、bashを使用してshで.shスクリプトを実行することです。

16
Lemon Tree

さて、通常は Shebang を使用して、シェルに正しいインタープリターを使用するように指示します。

#!/bin/bash

# your script here

スクリプトを実行可能に設定する必要があります。

chmod +x my_script.sh

そして、ユーザーにそれを開始させます:

./my_script.sh

ラッパースクリプトを使用するよりも簡単に思えます。

ユーザーがsh/dashまたはshのようなインタープリターを使用している場合でも、jbrテストを使用してbashでスクリプトを実行できます。

#!/bin/bash

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

# Your script here

このように、どちらかで正しく動作します:

sh ./my_script.sh

# or

bash ./my_script.sh

# or

./my_script.sh
31
neuro

他の何かの前のスクリプトでは、次のようなことができます。

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

または、より一般的な方法は$BASH_VERSION

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