경로가 존재하더라도 스크립트는 해당 경로가 존재하지 않는다고 보고합니다. 논리의 결함은 무엇입니까?
#!/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