파일 시스템 마운트를 확인하고 파일 경로를 확인하기 위한 Grep이 잘못된 정보를 제공함

파일 시스템 마운트를 확인하고 파일 경로를 확인하기 위한 Grep이 잘못된 정보를 제공함

경로가 존재하더라도 스크립트는 해당 경로가 존재하지 않는다고 보고합니다. 논리의 결함은 무엇입니까?

#!/bin/bash
mount="/fileserver"

if grep -qs "$mount" /proc/mount && { test -d '/fileserver/subdirectory'; } then
 echo "Both the mount and path exist."
else grep -qs "$mount" /proc/mount ! && { test -d '/fileserver/subdirectory'; }
 echo "mount exists, but path does not."
fi

답변1

아이디어는 완전히 정확하지만 부정 연산자와 함께 사용되는 것은 &&완전히 잘못된 위치에 있으므로 test부정 연산자와 함께 사용해야 합니다.

명령에 따라 if조건의 첫 번째 부분은 다음과 같이 평가됩니다.

grep -qs "$mount" /proc/mount !

부정 연산자를 검색할 다른 파일로 처리하면 이 grep결과가 나오지만 파일에 대한 오류 억제 플래그가 존재하지 않기 grep: !: No such file or directory때문에 -s() 오류가 터미널에 표시되지 않습니다.

또한 {..}명령만 있으면 복합 연산자가 필요하지 않습니다. 당신이 해야 할 일은 다음과 같습니다:

if grep -qs "$mount" /proc/mount &&  test -d "/fileserver/subdirectory";  then
    echo "Both the mount and path exist."
else grep -qs "$mount" /proc/mount && ! test -d "/fileserver/subdirectory"; then
    echo "mount exists, but path does not."
fi

grep즉, 스크립트가 실행 중임을 확인하기 직전에 출력을 무음으로 설정할 필요가 없습니다. -qs디버깅 단계를 추가하려면 플래그 없이 실행해 보세요 .


당신은 또한 사용할 수 있습니다마운트포인트(1)도구:유틸리티Linux해당 경로에 패키지가 설치되어 있는지 직접 확인하는 데 사용합니다.

if mountpath -q "/fileserver/subdirectory"; then

관련 정보