Сценарий оболочки меняет оболочку между
У меня есть скрипт оболочки с двумя шебангами, первый говорит #!/ Bin / sh, а через несколько строк другой - #!/ Usr/bin/env python.
Когда этот сценарий получает разрешение на выполнение и запускается как./script.sh, сценарий работает нормально, использует / bin / sh в первой части и использует интерпретатор python во второй части.
Но когда скрипт запускается как sh script.sh, второй шебанг не распознается и скрипт завершается неудачно. Есть ли в любом случае я могу заставить изменить интерпретатор, если скрипт запускается явно как sh script.sh.
Причина в том, что мне это нужно, потому что мне нужно запускать скрипты через инструмент, который запускается как sh script.sh
3 ответа
Насколько я знаю, вы не можете иметь два shebang
строки в одном скрипте. shebang
работает только когда -
- это на первой линии
- начинается в первом столбце
Если вам нужно запустить код 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)