对于我的一生,我无法弄清楚如何通过脚本进行 chroot,并为变量赋值。好的,我学会了如何在不停止脚本流程的情况下从脚本中 chroot 和执行命令:
#!/bin/bash
# Mini script for chrooting into chroot_dir and executing commands.
chroot_dir=$1
cat << EOF | chroot $chroot_dir /bin/bash
sysname=\`hostname\`
echo "You are running script.sh on ${sysname}"
EOF
运行此脚本,./script.sh "/chroot_dir/"
我得到以下输出:
您正在运行 script.sh
看起来要么 sysname 永远不会被分配,要么 sysname 立即失去它的值。如何使用此方法为 sysname 赋值以进行 chroot?
答案1
原因是${sysname}
在读取脚本时进行评估,而不是在稍后执行时进行评估。如果您\
在美元 () 之前添加反斜杠 ( ) $
,效果应该会更好。请注意,它与 无关chroot
,但它是 的一个功能bash
。