我的腳本創建了一個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