나는 최근에 bash가 test -e
순환 심볼릭 링크를 사용할 수 없다는 것을 발견했습니다.
ln -s ./test ./test
if [[ -e ./test ]]; then echo "exists"; fi
#this won't echo.
-L
따라서 then 을 사용하여 -e
이 작업을 수행 해야 합니다 .
if [[ -L ./test || -e ./test ]]; then echo "exists"; fi
-e
이것이 내 문제를 해결하는 동안 다루지 않은 다른 특수 사례가 있는지 궁금해지기 시작했습니다 .
또 어떤 극단적인 경우가 있나요? 파일이 존재하는지 확실하게 감지할 수 있는 이식 가능하고 간단한 방법이 있습니까?
답변1
문제는 순환 링크에 있는 것이 아니라 존재하지 않는 파일을 가리키는 기호 링크에 있습니다. 존재하지 않는 파일에 대한 심볼릭 링크를 가리킬 때마다 동일한 일이 발생합니다.
test
매뉴얼 페이지 에서 :
파일이 기호 링크인 경우 테스트는 해당 파일을 완전히 역참조한 다음 -h 및 -L 주요 옵션을 제외하고 참조된 파일에 대해 표현식을 평가합니다.
test
이것은 매뉴얼 페이지에 언급된 유일한 예외적인 경우입니다.