Eu não estou familiarizado com esse module
de seu software, mas parece que você deve ser capaz de fazer algo como:
#! /bin/sh -
'eval' '. "$MODULES_HOME/init/sh"; module load something || exit; exec python -- "$0" "$@"'
python script follows
Isso será interpretado pela primeira vez por sh
, que então chamará module
e executará python
no mesmo script e com os mesmos argumentos.
As duas primeiras linhas serão ignoradas por python
, a primeira porque é um comentário, a segunda porque é apenas a concatenação de duas sequências.
Mais geralmente:
#! /bin/sh -
'eval' 'single-line-of-shell-code-with-no-single-quote; exec python -- "$0" "$@"'
É uma maneira genérica de ter um script executável python
em que algum código de shell de preâmbulo é executado antecipadamente. Para o código de shell de várias linhas, você também pode usar as python
quotes de '''...'''
:
#! /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")
Então, aqui:
#! /bin/sh -
':' '''python script with shell preamble'
"$MODULES_HOME/init/sh"
module load something || exit
exec python -- "$0" "$@"
'''
python script follows