![소급하여 스크립트를 루트로 실행하려면 어떻게 해야 합니까?](https://linux55.com/image/60216/%EC%86%8C%EA%B8%89%ED%95%98%EC%97%AC%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EB%A3%A8%ED%8A%B8%EB%A1%9C%20%EC%8B%A4%ED%96%89%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
루트 권한으로 실행해야 하는 쉘 스크립트를 작성 중입니다.
사용자에게 루트 권한이 있는지 확인할 수 있지만 사용자의 자격 증명이 여전히 캐시되어 있지만 이를 통해 내 스크립트를 호출하지 않는 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로만 구분하여 높은 수준의 인용 또는 대체를 수행합니다.