Я не знаком с вашим module
программным обеспечением, но, похоже, вы сможете сделать что-то вроде:
#! /bin/sh -
'eval' '. "$MODULES_HOME/init/sh"; module load something || exit; exec python -- "$0" "$@"'
python script follows
Это будет сначала интерпретировано sh
, который затем вызовет module
и выполнит python
в том же скрипте и с теми же аргументами.
Первые две строки будут проигнорированы python
, первая, потому что это комментарий, вторая, потому что это просто конкатенация двух строк.
В более общем смысле:
#! /bin/sh -
'eval' 'single-line-of-shell-code-with-no-single-quote; exec python -- "$0" "$@"'
Это общий способ иметь исполняемый python
скрипт, в котором предварительно запускается некоторый код оболочки преамбулы. Для многострочного шелл-кода вы также можете использовать кавычки python
и '''...'''
:
#! /bin/sh -
':' '''python script with shell preamble'
arbitrary shell code here provided it doesn't contain
a sequence of 3 single quotes.
exec python -- "$0" "$@"
'''
print("Hello World")
Так вот:
#! /bin/sh -
':' '''python script with shell preamble'
"$MODULES_HOME/init/sh"
module load something || exit
exec python -- "$0" "$@"
'''
python script follows