Как мне разрешить более одного аргумента интерпретатору в shebang в сценарии

Сценарии можно хранить в /usr/bin или /usr/local/bin (предпочтительно) или /opt

Ссылки на сценарии можно найти в ExecStart= в служебной части файла модуля

.
2
07.04.2018, 06:52
2 ответа

Вам придется заставить интерпретатор игнорировать строку execи поместить содержимое скрипта в файл в обычном режиме. Варианты включают:

  • Полиглот-скрипты, в которых команда execнаписана так, что выглядит как комментарий, строка или похожа на реальный интерпретатор. Примеры :
  • передать скрипт интерпретатору с удаленными начальными строками
2
27.01.2020, 21:55

В дополнение к вариантам, которые дал муру, есть еще один вариант. В зависимости от сложности и длины скрипта, вы можете поместить скрипт внутри скрипта оболочки (будет ли он вообще полезен - это другой вопрос! )Используя механизм «здесь -документ» , вы можете встроить текст оболочки в другую программу, например:

test.sh

#!/bin/sh
exec /usr/bin/python3 <<EOF
import datetime
print("The time is now "+str(datetime.datetime.now()))
EOF

Я бы не стал использовать это, если программа очень большая, потому что такие сценарии сложнее редактировать; они встроены в другой язык, поэтому вам нужно извлечь сценарий, чтобы внести какие-либо изменения, если вы хотите их протестировать.

Как ни странно,обратите внимание, что оболочка по-прежнему расширяет переменные оболочки и интерпретирует специальные символы, используя этот метод:

#!/bin/sh
exec /usr/bin/python3 <<EOF
print("The current user is $USER and date is $(date).")
EOF

Возвращает The user is erik and date is Fri Apr 6 22:14:23 MDT 2018.

3
27.01.2020, 21:55

Теги

Похожие вопросы