在bash中执行chroot中的函数

vag*_*ant 2 linux bash shell chroot

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

例如,

install_script () {
    wget some_source_files && configure && make && make install
}
Run Code Online (Sandbox Code Playgroud)

和,

some_command -v foo >/dev/null 2>&1 || install_script
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

EOF
Run Code Online (Sandbox Code Playgroud)

并从主机执行,

chroot $chrooted_dir /bin/bash "check_command  || /etc/install_script.sh"
Run Code Online (Sandbox Code Playgroud)

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

PS:我也很欣赏任何相关的源/链接来理解bash句柄函数声明和随后对chrooting的继承.

tha*_*guy 7

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

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

该函数将变为带有名称的环境变量,该变量BASH_FUNC_install_func%%将被chrooted bash作为函数继承和重新解释.