![다른 사용자의 쉘에 변수 값 전달](https://linux55.com/image/126955/%EB%8B%A4%EB%A5%B8%20%EC%82%AC%EC%9A%A9%EC%9E%90%EC%9D%98%20%EC%89%98%EC%97%90%20%EB%B3%80%EC%88%98%20%EA%B0%92%20%EC%A0%84%EB%8B%AC.png)
다음은 간단한 스크립트입니다.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"