在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的继承。
答案 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继承并重新解释为函数。