sudo -i
쉘 스크립트에서 사용할 수 있나요 ? exit
해당 명령을 사용하면 문제가 발생할 것 같습니다 ...
#!/bin/bash
sudo -i
curl -L https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
exit
답변1
이미 테스트되었습니다! ...curl 명령이 어떻게 수정되는지 확인하세요...
#!/bin/bash
sudo -u root curl -L "https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo -u root chmod +x /usr/local/bin/docker-compose
exit
답변2
이 방법으로는 사용할 수 없습니다 sudo
. 스크립트는 대화형 루트 셸을 제공하고 셸을 종료할 때까지 일시 중지합니다. 그런 다음 권한 없이 스크립트의 나머지 명령을 실행합니다 root
.
당신의 스크립트라면오직권한이 필요한 작업을 수행 root
한 후 다음을 사용하여 전체 스크립트를 실행합니다 sudo
.
$ sudo ./myscript.sh
스크립트는 다음과 같습니다
#!/bin/bash
curl -L https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
(참고: 실제로 이 명령이 실제로 어떤 용도로 사용되는지는 살펴보지 않았습니다.)
그렇지 않으면 이것은 단지 개인적인 의견일 뿐이며, root
적어도 일반적인 작업이라면 스크립트의 다양한 부분을 분리하여 자체 스크립트에 넣는 것이 좋은 생각일 수 있습니다.
#!/bin/bash
# script that does things as an ordinary user
# ...
sudo "$HOME/admin_tasks/do_docker_stuff.sudo"
# rest of script
# ...
또는 다른 사람들이 수행하는 것처럼 스크립트의 각 줄 앞에 를 추가할 수 있습니다 sudo
. 이 경우 첫 번째 줄에 root
권한이 필요한 리디렉션이 있으므로 실패하므로 "수정"을 사용하여 전달합니다 sudo bash -c " ... > ... "
. 훌륭하고 읽기 쉬운 스크립트를 엉망으로 만들었습니다(다시 말하지만 개인적인 의견입니다).
잠시 생각해 본 후:이것은 매우 긴 스크립트가 아니므로 sudo
스크립트 내에서 여러 호출을 수행하는 것은 아마도 나쁜 생각이 아니지만 호출을 curl
외부에 남겨 둘 수 있습니다 sudo
.
#!/bin/bash
curl -L -o ./docker-compose "https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-$(uname -s)-$(uname -m)"
chmod a+x ./docker-compose
sudo mv ./docker-compose /usr/local/bin/docker-compose
sudo chown root:root /usr/local/bin/docker-compose
마지막 세 가지 명령할 수 있다do_local-bin_install.sudo
스크립트를 넣으세요(다른 스크립트에서 재사용할 수 있도록) :
#!/bin/bash
binary="$1"
chmod a+x "$binary"
chown root:root "$binary"
mv -i "$binary" /usr/local/bin/
스크립트에서 호출할 수 있습니다.
#!/bin/bash
curl -L -o ./docker-compose "https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-$(uname -s)-$(uname -m)"
sudo ./do_local-bin_install.sudo ./docker-compose
죄송합니다. 이것은 의식의 흐름 유형 답변입니다. 누군가가 이해할 수 있기를 바랍니다.