쉘 스크립트에서 sudo -i를 사용하는 방법

쉘 스크립트에서 sudo -i를 사용하는 방법

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

죄송합니다. 이것은 의식의 흐름 유형 답변입니다. 누군가가 이해할 수 있기를 바랍니다.

관련 정보