我正在使用 进入命名空间nsenter -m -u -i -n -p -t $PID /bin/bash
。但是,printenv
这个命名空间中没有我需要的一切。我想发送这些变量,但我想避免在我的 bash 命令前面加上 这样的前缀KEY=VALUE KEY2=VALUE2 /bin/bash
。
有一个更好的方法吗?
答案1
我现在不能做更多的事情,但看起来你可以使用--rc-file
, 或--profile,
等开关。
man bash
...
如果使用 sh 名称调用 bash,它会尝试尽可能模仿 sh 历史版本的启动行为,同时也符合 POSIX 标准。当作为交互式登录 shell 或带有 --login 选项的非交互式 shell 调用时,它首先尝试按顺序从 /etc/profile 和 ~/.profile 读取并执行命令。 --noprofile 选项可用于抑制此行为。当使用名称 sh 作为交互式 shell 调用时,bash 会查找变量 ENV,如果定义了该变量,则扩展其值,并使用扩展后的值作为要读取和执行的文件的名称。由于作为 sh 调用的 shell 不会尝试从任何其他启动文件读取和执行命令,因此 --rcfile 选项不起作用。使用名称 sh 调用的非交互式 shell 不会尝试读取任何其他启动文件。当作为 sh 调用时,bash 在读取启动文件后进入 posix 模式。
当 bash 以 posix 模式启动时,与 --posix 命令行选项一样,它遵循启动文件的 POSIX 标准。在此模式下,交互式 shell 扩展 ENV 变量,并从名称为扩展值的文件中读取和执行命令。不读取其他启动文件。