chown이 스크립트를 통해 작동하지 않습니다

chown이 스크립트를 통해 작동하지 않습니다

스크립트가 있습니다.

#! /bin/bash
sudo chown -R $USER:$USER /opt/Folder

chown이 실행되지 않는 것 같습니다.

터미널에서 위의 줄을 작성하면 정상적으로 실행됩니다!

내가 읽고이것그러나 그것은 도움이 되지 않았습니다.

스크립트 이름은 mysetup.sh이고 실행 중입니다 sudo sh mysetup.sh.

어떠한 출력도 제공하지 않습니다.

이렇게 실행하면 다음과 같은 결과를 sudo bash -x mysetup.sh얻습니다.

sudo chown -R root:root /opt/Folder

이 질문은 관련이 없습니다이것, 사용자가 설정했기 때문입니다.

답변1

/opt/Folder콘텐츠를 다음으로 변경하려고 합니다 .당신 자신사용자 ID 아닌가요?

이것은 당신의 명령입니다:

sudo chown -R $USER:$USER /opt/Folder

$USER명령이 실행되기 전에 변수가 평가되므로 명령줄에서 작동하므로 다음과 같이 작동합니다(사용자 이름이 이라고 가정 george).

sudo chown -R george:george /opt/Folder

반면, run 명령을 사용하면 sudo무엇보다도 $USER변수가 대상 사용자의 값을 갖게 됩니다(이 경우에는 ) root. 따라서 실행하면 루트로 sudo bash mysetup.sh실행되므로 mysetup.sh명령 런타임이 다음과 같이 $USER설정되고 평가됩니다.root

sudo chown -R root:root /opt/Folder

귀하의 경우 해결책은 전체 스크립트 자체를 실행하지 않고 필요한 경우 sudo스크립트가 높은 권한으로 특정 명령을 실행하도록 하는 것입니다 . sudo즉, 대신 bash mysetup.sh에 를 사용하십시오 sudo bash mysetup.sh.

답변2

실행 중인 Linux(또는 Unix)의 배포판과 버전을 언급하지 않았으므로 여기서는 주제에서 벗어나 다음 줄이/etc/sudoers

Defaults requiretty

따라서 tty가 없으면 sudo를 실행할 수 없습니다. 스크립트에서 실행하려고 하면 명령이 sudo실행되지 않아 chown명령이 효과적으로 손상됩니다.

sudo 명령을 추가하거나 전환해 보세요 -t. -tt이는 명령 체인을 실행하고 성공할 수 있는 의사 터미널을 생성 sudo하지만 이 옵션에는 여기에서 논의되지 않은 부작용도 있습니다. 원하는 경우 검색할 수 있습니다.

구성 에 액세스할 수 있는 경우 sudo위의 줄을 꺼내서 최상의 솔루션을 얻을 수 있지만 이렇게 하면 아무리 약한 장애물이라도 한 레이어의 장애물이 제거됩니다.

관련 정보