Запуск рекурсивного сценария в качестве модуля systemd

Я не знаком с вашим 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
0
08.11.2017, 17:36
0 ответов

Теги

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