소급하여 스크립트를 루트로 실행하려면 어떻게 해야 합니까?

소급하여 스크립트를 루트로 실행하려면 어떻게 해야 합니까?

루트 권한으로 실행해야 하는 쉘 스크립트를 작성 중입니다.

사용자에게 루트 권한이 있는지 확인할 수 있지만 사용자의 자격 증명이 여전히 캐시되어 있지만 이를 통해 내 스크립트를 호출하지 않는 sudo -nv || echo "no sudo"경우에는 도움이 되지 않습니다 . sudo따라서 사용자에게 반응할 수 없으며 sudo를 사용하여 스크립트를 호출할 수 없습니다.

이를 필요로 하는 모든 명령 앞에 배치할 수 있으므로 sudo사용자에게 루트 권한이 있는지 확인하는 것만으로도 충분하지만 제 생각에는 더 나은 솔루션이 있어야 합니다.

사용자에게 루트 권한을 제공하도록 요구하고, 제공된 경우 사용자가 처음에 루트 권한으로 호출한 것처럼 나머지 스크립트를 실행하는 스크립트에 넣을 수 있는 명령을 찾고 있습니다.

내가 원하는 것은:

#!/bin/bash

if ! command; then        # what I'm looking for
    echo "This script needs root privileges."
    exit 1
fi

mv /bin/cmd1 /bin/cmd2    # requires root

2번 수정됨

답변1

당신이 루트인지 테스트, 그렇지 않은 경우 restart 를 사용하십시오 sudo. 예를 들면 다음과 같습니다.

#! /bin/bash

if [[ $EUID -ne 0 ]];
then
    exec sudo /bin/bash "$0" "$@"
fi

답변2

 #!/bin/sudo /bin/bash

if ! command; then        # what I'm looking for
    echo "This script needs root privileges."
    exit 1
fi

She-bang은 껍질에만 적용되는 것이 아닙니다. 이 파일은 실행 파일과 마찬가지로 커널에 의해 액세스됩니다. 커널은 선행 "#!"을 첫 번째 항목을 실행하는 표시기로 해석하고 후속 항목을 새 프로세스에 개별 인수로 전달합니다. 또한 스크립트 파일 경로를 프로세스에 argv[2]로 전달하도록 구성합니다.

커널은 공백, 탭, 줄 바꿈 및 null로만 구분하여 높은 수준의 인용 또는 대체를 수행합니다.

관련 정보