cat을 사용하여 파일에 문자열이 있는지 확인 | grep

cat을 사용하여 파일에 문자열이 있는지 확인 | grep

모두 좋은 하루

목적: 파일에 문자열이 있는지 확인하고 그에 따라 작업을 실행합니다.

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실행할 수 있는 경우 :grepcat

if sudo grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL" /etc/sudoers
then
  echo found
else
  echo not found
fi

-qgrep종료 상태를 통해 true/false 상태를 반환하고 stdout에는 아무것도 출력하지 않도록 조용히 하라고 지시합니다 .

sudoers 구성에는 해당 접근 방식이 고려되지 않는 다른 구성 파일이 포함될 수 있습니다. 사용자가 구성원으로 속한 그룹에 부여된 권한과 동일합니다.

대신 사용하고 싶을 수도 있습니다 sudo -lU "$USER".

관련 정보