나는 평생 동안 스크립트를 통해 루트를 변경하고 변수에 값을 할당하는 방법을 알아낼 수 없습니다. 좋습니다. 스크립트 흐름을 중단하지 않고 스크립트에서 명령을 루트로 이동하고 실행하는 방법을 배웠습니다.
#!/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이 즉시 해당 값을 잃는 것처럼 보입니다. 이 방법을 사용하여 chroot의 sysname에 값을 할당하려면 어떻게 해야 합니까?
답변1
그 이유는 ${sysname}
나중에 실행할 때가 아니라 스크립트를 읽을 때 평가되기 때문입니다. \
dollar() 앞에 백슬래시()를 추가 하면 $
더 잘 작동합니다 . 와는 아무 관련이 없지만 chroot
의 기능임을 참고하세요 bash
.