쉘 스크립트를 실행할 때 사용자에게 루트로 로그인하도록 프롬프트 쉘 스크립트를 계속 하지 않습니다 .

내가 겪고있는 문제는 명령을 입력하면

su - root

쉘 스크립트 파일의 시작 부분에서 사용자에게 비밀번호를 입력하라는 프롬프트를 표시 한 후 나머지 쉘 스크립트를 계속 하지 않습니다 . 그런 다음 터미널을 통해 셸 스크립트를 수동으로 찾아서 실행해야합니다. 스크립트가 사용자가 루트로 로그인했는지 확인한 다음 나머지 쉘 스크립트를 계속 진행하고 싶습니다.

다시 말해서 스크립트를 다른 사용자로 실행하고 싶지만 스크립트가 실행 되 자마자 사용자는 루트로 변경 한 다음 스크립트가 끝날 때까지 루트로 나머지 스크립트를 계속 사용해야합니다. 이것을 할 수 있습니까?



답변

이것은 달성하기가 매우 쉽습니다.

#!/bin/sh
[ "$(whoami)" != "root" ] && exec sudo -- "$0" "$@"

현재 사용자가 루트가 아닌 경우를 통해 스크립트를 다시 실행하십시오 sudo.

sudo여기서 대신을 사용하고 있습니다 su. 인수를 보존 할 수 있기 때문입니다. 을 사용 하면 공백이나 특수 쉘 문자가있는 경우 인수를 엉망 su으로 su -c "$0 $@"만드는 명령이 있어야합니다 .

쉘이 bash이면 외부 호출을 피할 수 있습니다 whoami.

(( EUID != 0 )) && exec sudo -- "$0" "$@"


답변

UID도 확인할 수 있습니다.

 if [ $(id -u) != 0 ]; then
     echo "You're not root"
     # elevate script privileges
 fi


답변

스크립트 자체를 호출하고 다음을 확인할 수 있습니다.

#! /bin/bash

if [ "root" != "$USER" ]; then
  su -c "$0" root
  exit
fi

...


답변

로그인하려는 지점에서 다음 명령을 추가하십시오.

sudo su

이것은 내 코드와 완벽하게 작동합니다.


답변