Вы не можете сделать это с помощью шебанга, потому что его формат ( в Linux ):
#!interpreter [optional-arg]
И этот аргумент передается в виде одной строки (см. «Сценарии интерпретатора» и«Сценарии переводчика» в связанном документе).Другими словами, вы не можете передать несколько аргументов (если они не могут быть объединены в одну строку) интерпретатору.Это связано с реализацией в ядре того, как выполняется код.
Использование env -S
здесь также бесполезно, потому что, как вы можете видеть в результатах отладки:
arg[0]= ‘bash’
arg[1]= ‘-c’
arg[2]= ‘time /usr/bin/python3 -OO’
arg[3]= ‘./mypycheck.py’
Он запускает оболочку, приказывает запустить команду (-c
), начиная с python, заключенного в time
и затем передавая ‘./mypycheck.py’
bash (не python) в качестве последнего аргумента.значение которого (применяется к bash):
-c
Если присутствует опция -c
, то команды читаются из первого неопционального аргумента command_string
.Если после command_string
есть аргументы, первый аргумент присваивается $0
, а все остальные аргументы присваиваются позиционным параметрам.Присвоение $0
устанавливает имя оболочки, которое используется в предупреждениях и сообщениях об ошибках.
Что касается вашей цели.Вы можете создать оболочку, которая будет использоваться в качестве интерпретатора вместо env
в вашем случае, которая выполняет желаемые действия и передает сценарий фактическому интерпретатору.