내가 겪고있는 문제는 명령을 입력하면
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
이것은 내 코드와 완벽하게 작동합니다.