내가 겪고 있는 문제는 명령을 입력할 때
su - root
내 쉘 스크립트 파일의 시작 부분에서 사용자에게 비밀번호를 묻는 메시지를 표시한 다음 다음을 실행합니다.아니요나머지 쉘 스크립트를 계속 진행하십시오. 그런 다음 터미널을 통해 쉘 스크립트를 수동으로 찾아서 실행해야 합니다. 사용자가 루트로 로그인했는지 확인한 다음 나머지 쉘 스크립트를 진행하는 스크립트를 원합니다.
즉, 임의의 사용자로 스크립트를 실행하고 싶지만 일단 스크립트가 실행되기 시작하면 사용자는 루트로 변경한 다음 완료될 때까지 나머지 스크립트를 루트로 계속 실행해야 합니다. 이것이 가능합니까?
답변1
이는 구현하기 쉽습니다.
#!/bin/sh
[ "$(whoami)" != "root" ] && exec sudo -- "$0" "$@"
현재 사용자가 루트가 아닌 경우 스크립트를 다시 실행하십시오 sudo
.
sudo
매개변수를 보존 할 수 있기 때문에 su
여기서는 . 를 사용하는 경우 su
명령은 다음과 같아야 합니다. su -c "$0 $@"
공백이나 특수 쉘 문자가 포함된 경우 인수가 손상됩니다.
쉘이 bash인 경우 외부 호출을 피할 수 있습니다 whoami
.
(( EUID != 0 )) && exec sudo -- "$0" "$@"
답변2
UID를 확인할 수도 있습니다.
if [ $(id -u) != 0 ]; then
echo "You're not root"
# elevate script privileges
fi
답변3
스크립트 자체를 호출하여 다음을 확인할 수 있습니다.
#! /bin/bash
if [ "root" != "$USER" ]; then
su -c "$0" root
exit
fi
...
답변4
로그인하려는 위치에 다음 명령을 추가하면 됩니다.
sudo su
이것은 내 코드와 완벽하게 작동합니다.