다른 사용자의 쉘에 변수 값 전달

다른 사용자의 쉘에 변수 값 전달

다음은 간단한 스크립트입니다.a.sh

#name: a.sh
user=$(whoami)
sudo runuser -l test2 -c 'touch /home/test2/$user.file'

test1현재 사용자의 사용자 이름을 변수 에 저장 user하고 디렉토리에 /home/test2user 로 파일을 생성하려고 합니다 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"

관련 정보