스크립트가 있습니다.
#! /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
위의 줄을 꺼내서 최상의 솔루션을 얻을 수 있지만 이렇게 하면 아무리 약한 장애물이라도 한 레이어의 장애물이 제거됩니다.