
모두 좋은 하루
목적: 파일에 문자열이 있는지 확인하고 그에 따라 작업을 실행합니다.
if [ -z 'sudo cat /etc/sudoers | grep "$USER ALL=(ALL) NOPASSWD:ALL"' ]; echo "no output, cont." || echo "line exists, skipping"
라인이 존재하지만 존재하지 않는 봇의 경우 출력에는 항상 "라인 존재, 건너뛰기"가 표시됩니다.
출력을 변수(예: x)에 추가하고 if 문의 행을 변수로 대체하면 올바른 출력이 생성됩니다.
변수 경로를 '건너뛰고' 명령을 직접 실행할 수 있나요?
답변1
grep
조건 명령으로 사용할 수 있습니다. 패턴이 일치하면 true를 반환합니다. 여기서는 고정 문자열 검색( )을 원 -F
하고 아마도 전체 행( -x
)에서 일치하도록 할 것입니다.
if sudo cat /etc/sudoers |
grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL"
then
echo found
else
echo not found
fi
또는 구성을 통해 다음 명령 외에 추가로 명령을 sudoers
실행할 수 있는 경우 :grep
cat
if sudo grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL" /etc/sudoers
then
echo found
else
echo not found
fi
-q
grep
종료 상태를 통해 true/false 상태를 반환하고 stdout에는 아무것도 출력하지 않도록 조용히 하라고 지시합니다 .
sudoers 구성에는 해당 접근 방식이 고려되지 않는 다른 구성 파일이 포함될 수 있습니다. 사용자가 구성원으로 속한 그룹에 부여된 권한과 동일합니다.
대신 사용하고 싶을 수도 있습니다 sudo -lU "$USER"
.