python - sudo -E 不通过 PYTHONPATH

标签 python linux bash sudo

我正在尝试将 python 路径值添加到不同的环境,因为我与另一个用户一起运行的某些脚本需要设置它。

现在,奇怪的是,当我运行 sudo -E 时,我在 env 中的变量确实传递给了用户,我是 sudoing 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/

相关文章:

linux - ld 找不到已安装的库

git - 我的自定义 git 子命令已停止工作

Python 连接和排序 3 个数据帧

python - Macports 和 virtualenv 站点包 后备

linux - 检查 T 日期的文件,然后检查该文件中是否有任何内容

linux - 是否可以在Linux命令行中使用 "py"代替 "python"?

linux - Bash 脚本搜索和替换

python - 在 Python 中覆盖 "remaining elements truncated"

python - 在 Mint 上安装 M2Crypto 时出现问题

linux - 如何在 Linux "screen"程序中使用 vim 的制表符?