Сценарий оболочки меняет оболочку между

У меня есть скрипт оболочки с двумя шебангами, первый говорит #!/ Bin / sh, а через несколько строк другой - #!/ Usr/bin/env python.

Когда этот сценарий получает разрешение на выполнение и запускается как./script.sh, сценарий работает нормально, использует / bin / sh в первой части и использует интерпретатор python во второй части.

Но когда скрипт запускается как sh script.sh, второй шебанг не распознается и скрипт завершается неудачно. Есть ли в любом случае я могу заставить изменить интерпретатор, если скрипт запускается явно как sh script.sh.

Причина в том, что мне это нужно, потому что мне нужно запускать скрипты через инструмент, который запускается как sh script.sh

3 ответа

Насколько я знаю, вы не можете иметь два shebang строки в одном скрипте. shebang работает только когда -

  1. это на первой линии
  2. начинается в первом столбце

Если вам нужно запустить код Python, поместите его в другой скрипт и затем вызовите скрипт, выполнив

python path/to/the/script.py

Лучший способ сделать это - использовать оболочку документа. Что-то вроде этого:

#!/bin/sh
curdir=`pwd`
/usr/bin/env python <<EOF
import os
print os.listdir("$curdir")
EOF

Таким образом, вам не нужно распределять код по двум отдельным файлам.

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

Ваш скрипт script.sh напрямую вызывает интерпретатор python:

#!/bin/sh
# include full path if needed
python (your python interpreter arguments)
Другие вопросы по тегам