2015-06-11 52 views
2

在bash中將函數從主機傳遞到chroot的理想方式是什麼?在bash中的chroot中執行函數

例如,

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

,並

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

,但如果我要執行從主機到chroot環境一樣,我怎麼去這樣做呢?我能想到的

一種方法是將函數傳遞到chroot的目錄中的文件,

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:我也很感謝任何相關的資源/鏈接,以瞭解bash處理函數聲明和隨後在chroot中的繼承。

回答

6

您可以導出功能,並執行它們在繼承殼:

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%%,它將被繼承和reinterpretted通過chroot的bash的一個功能的環境變量。