如何将多个变量和函数传递给 chroot 环境?

如何将多个变量和函数传递给 chroot 环境?

我正在编写一个脚本来自动化我的 Arch Linux 安装过程,但我遇到了一个环境问题。我有一个包含安装顺序的文件和一个包含所有功能的文件,这些功能源自脚本的开头。

运行arch-chroot /mnt /bin/bash -c someFunction无法识别该行代码之前设置的函数或变量。

如果我export -f someFunction它会识别该函数,但someFunction它本身只是一个分解函数,它只调用其他函数。在 chroot 环境中获取所有函数的最优雅的方法是什么?

我还需要一种将用户在脚本开头设置的所有变量导出到 chroot 环境中的方法。(我猜解决上述问题也将解决这个问题)

答案1

我设法传递变量而不复制它们(在脚本外部复制敏感变量会带来安全风险)。下面是一个片段。

cp archsin-functions /mnt/root/;

arch-chroot /mnt /bin/bash -- << EOCHROOT

    source \$HOME/archsin-functions;

    createSwap;
    setLocale "${CITY}";
    setHost "${HSTNAME}";
    setInitramfs "${REPOAPITOKEN}" "${REPOID}";
    setUser "${USRGROUPS}" "${USRNAME}" "${USRPASSWD}" "${REPOAPITOKEN}" "${REPOID}";

    systemctl enable NetworkManager.service

EOCHROOT

shred --verbose -u --zero --iterations=3 /mnt/root/archsin-functions;

<< EOCHRROOT-特雷多克将行标记EOCHROOT放到/bin/bashchroot 环境中创建的执行 shell 中。

由于变量扩展是在读取文件时完成的,因此函数将正确提供变量内保存的数据。转义符$会阻止 的扩展,$HOME直到该行实际执行为止。执行时,它将在 chroot 环境中完成,从而$HOME评估/root放置函数文件的 chroot 环境的文件夹。执行后,该文件将被删除,不留任何痕迹。

答案2

将变量和函数放在/etc/profile.dchroot 层次结构中的目录中的文件中,然后 bash应该启动时的源(如果您已经设置了 bash 使用的其他 /etc 文件)。

相关内容