Bash
如何將多個變數和函式傳遞給 chroot 環境?
我正在編寫一個腳本來自動化我的 Arch Linux 安裝過程,但我遇到了一個環境問題。我有一個包含安裝順序的文件和一個包含所有功能的文件,這些文件來自腳本的開頭。
執行
arch-chroot /mnt /bin/bash -c someFunction
不辨識函式,也不辨識這行程式碼之前設置的變數。如果我
export -f someFunction
它會辨識函式,但someFunction
它本身只是一個分解函式,它只呼叫其他函式。在 chroot 環境中獲取所有功能的最優雅的方式是什麼?我還需要一種將使用者在腳本開頭設置的所有變數導出到 chrooted 環境中的方法。(我猜解決上述問題也會解決這個問題)
我設法在不複製它們的情況下傳遞了我的變數(在腳本之外複製敏感變數會帶來安全風險)。下面是一個片段。
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
- heredoc將行粘貼到在 chroot 環境中創建EOCHROOT
的執行 shell 中。/bin/bash
由於在讀取文件時完成了變數擴展,因此將為函式提供正確保存在變數中的數據。轉義
$
可防止擴展,$HOME
直到該行實際執行為止。當它被執行時,它將在 chroot 環境中完成,從而對放置函式文件的 chroot env 文件夾進行$HOME
評估。/root
執行後,文件將被刪除而無影無踪。
將變數和函式放在
/etc/profile.d
chroot 層次結構目錄中的文件中,bash應該在啟動時獲取它(如果您設置了 bash 使用的其他 /etc 文件)。