![bash에서 "true"의 목적은 무엇입니까 "if sudo true; then"](https://linux55.com/image/150639/bash%EC%97%90%EC%84%9C%20%22true%22%EC%9D%98%20%EB%AA%A9%EC%A0%81%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%20%22if%20sudo%20true%3B%20then%22.png)
나는 사용자에게 슈퍼유저 권한이 있는지 테스트하고 그렇지 않은 경우 슈퍼유저 권한을 요청하는 bash 스크립트를 작성했습니다. 궁극적으로 다음 두 줄을 삭제할 수 있도록 두 번째 "if" 문을 반대로 바꾸려고 합니다(echo "password ok" 및 다음 줄의 else).
# Root user only
if [[ "$EUID" != 0 ]]; then
sudo -k # make sure to ask for password on next sudo
if sudo true; then
echo "Password ok"
else
echo "Aborting script"
exit 1
fi
fi
echo "do my ops"
네 번째 줄의 목적이 "true"라는 것은 단지 빈 진술일까요?
네 번째 줄에서 테스트를 반대로 해야 하는데 어떻게 해야 합니까? 내가 시도한 것은 다음과 같습니다.
if sudo false; then
if sudo true == false; then
if [!(sudo true)]; then
답변1
true
bash의 키워드가 아니며 성공적인 종료 코드로 즉시 종료되는 프로그램입니다. 마찬가지로 false
실패한 종료 코드로 종료되는 프로그램입니다.
터미널에서 두 프로그램을 모두 실행한 다음 $?
마지막 프로그램의 종료 코드가 포함된 변수를 읽어서 시도해 볼 수 있습니다.
true
echo $? # 0
false
echo $? #1
if sudo true
와 같지 않습니다 if sudo == true
. 을 사용하여 프로그램을 실행 if sudo true
하고 종료 코드를 확인합니다.true
sudo
그래서:
if sudo false; then
프로그램이 sudo 로 실행 중입니다 false
. 반환 값은 항상 false입니다.
if sudo true == false
true
인수를 사용하여 ==
프로그램 을 실행하고 . 이것은 분명히 당신이 원하는 것이 아닙니다.false
sudo
if [!(sudo true)]
잘못된 구문입니다.
당신이 찾고 있는 것은
if ! sudo true;
답변2
허용된 답변이 실제로 귀하의 질문에 대한 답변이 아닌 것 같나요?
이것목적실제로 할 수 있는지 확인하려면 이렇게 하십시오 sudo
.
어떻게이 확인은 true
허용된 답변에 설명된 대로 프로그래밍 방식으로 수행됩니다.
답변3
이 스크립트에서 볼 수 있듯이. sudo가 활성화되어 있는지 확인하는 것뿐입니다.
true는 단순히 true를 반환합니다.
따라서 이 경우 sudo를 사용하여 명령을 실행해야 하는 경우 먼저 시작을 확인하고 비밀번호를 한 번만 묻습니다.
조건은 다음과 같이 작동합니다. sudo가 true 명령을 올바르게 실행하면 if 조건이 true를 반환하고 sudo가 활성화되고 사용자가 입력한 비밀번호가 정확합니다. 그렇지 않으면 잘못된 비밀번호를 입력했거나 sudo가 활성화되지 않아 스크립트가 계속 진행되어서는 안 됩니다. .
다른 명령은 인증이 처음으로 성공하므로 sudo 비밀번호를 요청할 필요가 없습니다(그러나 이는 sudo 구성에 따라 다르므로 이 스크립트는 환경 구성에 크게 의존합니다).
"echo Password ok"도 이를 증명합니다. 쉘 스크립트는 더 이상 비밀번호를 요구하지 않습니다.