Подтвердить что ты не робот

Запустите bash script с sh

У меня есть bash script, и для этого требуется bash.

Другой пользователь пытается запустить его с помощью

sh script_name.sh

И он терпит неудачу, потому что sh является символической ссылкой на тире в его распределении.

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

У меня есть идея использовать обертку script:

#!/bin/sh
bash script_name.sh

Цель состоит в том, чтобы запустить .sh script sh с помощью bash в системе, имеющей символическую ссылку на тире.

4b9b3361

Ответ 1

Хорошо, обычно вы используете shebang, чтобы сообщить оболочке использовать правильный интерпретатор:

#!/bin/bash

# your script here

Вы должны установить script для выполнения:

chmod +x my_script.sh

И пусть пользователь запустит его с помощью:

./my_script.sh

Кажется простым, чем использовать обертку script.

Вы можете использовать jbr-тест для запуска script с помощью bash, даже если пользователь использует sh/dash или любой sh-интерпретатор:

#!/bin/bash

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

# Your script here

Таким образом, он правильно работает с:

sh ./my_script.sh

# or

bash ./my_script.sh

# or

./my_script.sh

Ответ 2

В вашем script перед чем-нибудь еще вы можете сделать что-то вроде:

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