Вам необходимо export
функция (с опцией -f
):
$ function func()
> {
> echo "Custom env : $CUSTOM_ENV"
> }
$ export -f func
$ export CUSTOM_ENV="abc"
$ python
Python 2.7.10 (default, Oct 6 2017, 22:29:07)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system('func')
Custom env : abc
0
Обратите внимание, что export
функция (и переменные) экспортирует копий изфункция и переменная для подпроцессов оболочки, из которой они экспортируются.Они недоступны в родительских (или родственных) процессах.Кроме того, их изменение в подпроцессе не влияет на исходную копию.
Кроме того, экспорт функций выполняется только для bash, поэтому это работает, только если родительская оболочка и оболочка, запущенная из python, являются bash.В ОС, где bash не используется по умолчанию (например, последние выпуски Ubuntu и Debian), вам нужно явно запустить bash, иначе он не будет работать.Все это делает его довольно хрупким, и, как указал @triplee, не очень хорошая идея.