我正在尝试将 python 路径值添加到不同的环境,因为我与另一个用户一起运行的某些脚本需要设置它。
现在,奇怪的是,当我运行 sudo -E
时,我在 env
中的变量确实传递给了用户,我是 sudo
ing to- 除了 PYTHONPATH 没有。
运行:
TESTVAR=testValue sudo -E bash -c 'echo $TESTVAR'
将打印“testValue”,但是:
PYTHONPATH=testValue sudo -E bash -c 'echo $PYTHONPATH'
不会打印任何东西。
我试图了解特定变量是否有任何特殊之处,sudo 在将它们传递到不同环境时的行为有所不同。
非常感谢您的帮助,谢谢。
最佳答案
因为 PYTHONPATH
位于 sudo
的默认“坏”变量表中,要从环境中删除(如果未使用 env_keep
明确保留) >).
sudo
源代码的plugins/sudoers/env.c
文件:
/*
* Default table of "bad" variables to remove from the environment.
* XXX - how to omit TERMCAP if it starts with '/'?
*/
static const char *initial_badenv_table[] = {
"IFS",
.
. (Truncated)
.
"PYTHONHOME", /* python, module search path */
"PYTHONPATH", /* python, search path */
"PYTHONINSPECT", /* python, allow inspection */
"PYTHONUSERBASE", /* python, per user site-packages directory */
"RUBYLIB", /* ruby, library load path */
"RUBYOPT", /* ruby, extra command line options */
NULL
};
如您所见,PYTHONPATH
就在其中。
在运行时实现这个的编译二进制文件是/usr/lib/sudo/sudoers.so
。
关于python - sudo -E 不通过 PYTHONPATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35824788/