從腳本中退出 chroot

從腳本中退出 chroot

我的腳本創建了一個chroot籠子來將 GRUB 安裝到 USB,當然以 sudo 運行:

SYSTEM_DIRS=(etc bin sbin var lib lib64 usr proc sys dev tmp)

boot_partition=/media/user/boot

for dir in ${SYSTEM_DIRS[@]}; do
  mount --bind /$dir ${boot_partition}/${dir}
done

然後在裡面執行一些指令chroot

chroot ${boot_partition}/ touch foo # works fine
...

但是當我想執行命令時exit

chroot ${boot_partition}/ exit

我得到:

chroot: failed to execute the command <<exit>>: No such file or directory

為什麼會發生這種情況並且有辦法解決它嗎?

答案1

exit是一個內建的 shell,而不是獨立的可執行文件,這意味著它不能由chroot.然而,即使可以,你的命令也不會執行任何操作。

此命令在 chroot/executable上下文中運行/path

chroot /path /executable

它不會將呼叫者留在該 chroot 內;運行完成後就會隱式退出/executable

mkdir -p /tmp/cr/{bin,lib,lib64}
cp -p /bin/pwd /tmp/cr/bin
cp -p $(find /lib* /usr/lib* -name 'libc.so*') /tmp/cr/lib
cp -p $(find /lib* /usr/lib* -name 'ld-linux-x86-64.so*') /tmp/cr/lib64

/bin/pwd                   # "/root"
chroot /tmp/cr /bin/pwd    # "/"
/bin/pwd                   # "/root"

答案2

我遇到同樣的問題,我的解決方案是當你執行 chroot 時,在其後附加 exit :

chroot /chroot_path && exit

那麼如果使用者退出 chroot,將退出整個 shell

相關內容