在bash中执行chroot中的函数

时间:2015-06-11 21:47:17

标签: linux bash shell chroot

在bash中将函数传递给主机chroot的理想方法是什么?

例如,

install_script () {
    wget some_source_files && configure && make && make install
}

和,

some_command -v foo >/dev/null 2>&1 || install_script

但如果我想从主机执行同样的操作,我该怎么做呢?

我能想到的一种方法是将函数传递给chrooted目录中的文件,

cat > $chrooted_dir/etc/install_script.sh <<"EOF"

#!/bin/bash
wget source_files ; ./configure ; make ; make install

EOF

从主持人执行,

chroot $chrooted_dir /bin/bash "check_command  || /etc/install_script.sh"

但我想知道是否有更优雅的方法来解决这个问题?理想情况下,我想从主机中的cript执行命令,并在chroot系统内执行一些安装。

P.S:我还要了解任何相关的源/链接,以了解bash句柄函数声明和随后对chrooting的继承。

1 个答案:

答案 0 :(得分:7)

您可以导出函数并在继承shell中执行它们:

install_func () {
    wget some_source_files && configure && make && make install
}
export -f install_func
chroot "$chrooted_dir" /bin/bash -c "install_func"

该函数将变为名为BASH_FUNC_install_func%%的环境变量,该变量将被chrooted bash继承并重新解释为函数。