다음은 간단한 스크립트입니다.a.sh
#name: a.sh
user=$(whoami)
sudo runuser -l test2 -c 'touch /home/test2/$user.file'
test1
현재 사용자의 사용자 이름을 변수 에 저장 user
하고 디렉토리에 /home/test2
user 로 파일을 생성하려고 합니다 test2
. 스크립트는 오류 없이 반환되지만 빌드는 없습니다 test1.file
. /home/test2
둘러본 결과 .file
이라는 변수가 있음을 발견했습니다 /home/test2
. 이는 test2
쉘 환경에 들어간 후 $user
변수가 구문 분석되지 않음을 의미합니다.
어떻게 해결하나요?
답변1
$user
명령줄 확장은 명령이 실행되기 전에 sudo
발생합니다 . touch
해당 시점에 활성화된 환경(아마도 지워짐 sudo
)에서 해당 값은 정의되지 않았으므로 빈 문자열로 확장됩니다. 여기에서 호출 파일을 얻을 수 있습니다 .file
.
올바른 이름으로 파일을 생성하려면 touch
명령 주위에 큰따옴표를 사용하십시오. 이렇게 하면 $user
확장이 보장됩니다.앞으로 sudo
호출됩니다 :
sudo runuser -l test2 -c "touch /home/test2/$user.file"
runuser
참고: 그것이 무엇인지 모르겠습니다 . 나는 사용할 것이다
sudo -u test2 touch "/home/test2/$user.file"