bash에 symlink가 있는지 확인하려고합니다. 여기 내가 시도한 것이 있습니다.
mda=/usr/mda
if [ ! -L $mda ]; then
echo "=> File doesn't exist"
fi
mda='/usr/mda'
if [ ! -L $mda ]; then
echo "=> File doesn't exist"
fi
그러나 그것은 작동하지 않습니다. 만약 ‘!’ 빠지지 않으면 트리거되지 않습니다. 그리고 만약 ‘!’ 거기에, 그것은 매번 트리거합니다.
답변
-L
“파일”이 존재하고 심볼릭 링크 인 경우 true를 리턴합니다 (링크 된 파일이 존재하거나 존재하지 않을 수 있음). 원하는 -f
경우 (파일이 존재하고 일반 파일 인 -e
경우 true를 반환 ) 또는 어쩌면 (유형에 관계없이 파일이 존재하는 경우 true를 반환)
받는 따르면 GNU 맨 , -h
동일 -L
하지만 따른 BSD 맨 이를 사용해서는 안된다 :
-h file
파일이 존재하고 기호 링크 인 경우에 해당됩니다. 이 연산자는이 프로그램의 이전 버전과의 호환성을 위해 유지됩니다. 그 존재에 의존하지 마십시오. 대신 -L을 사용하십시오.
답변
-L이 존재하고있다 파일에 대한 테스트입니다 또한 심볼릭 링크
기호 링크 인 파일을 테스트하지 않고 유형 (파일, 디렉토리, 소켓 등)에 관계없이 파일이 존재하는지 테스트하려면 -e를 사용하십시오.
따라서 파일이 심볼 링크가 아니라 실제로 파일 인 경우 이러한 모든 테스트를 수행하고 값이 오류 조건을 나타내는 종료 상태를 얻을 수 있습니다.
if [ ! \( -e "${file}" \) ]
then
echo "%ERROR: file ${file} does not exist!" >&2
exit 1
elif [ ! \( -f "${file}" \) ]
then
echo "%ERROR: ${file} is not a file!" >&2
exit 2
elif [ ! \( -r "${file}" \) ]
then
echo "%ERROR: file ${file} is not readable!" >&2
exit 3
elif [ ! \( -s "${file}" \) ]
then
echo "%ERROR: file ${file} is empty!" >&2
exit 4
fi
답변
심볼릭 링크가 있는지 확인하고 심볼릭 링크가 손상되지 않았는지 확인할 수 있습니다.
[ -L ${my_link} ] && [ -e ${my_link} ]
따라서 완벽한 솔루션은 다음과 같습니다.
if [ -L ${my_link} ] ; then
if [ -e ${my_link} ] ; then
echo "Good link"
else
echo "Broken link"
fi
elif [ -e ${my_link} ] ; then
echo "Not a link"
else
echo "Missing"
fi
답변
아마도 이것이 당신이 찾고있는 것입니다. 파일이 존재하고 링크가 아닌지 확인합니다.
이 명령을 시도하십시오 :
file="/usr/mda"
[ -f $file ] && [ ! -L $file ] && echo "$file exists and is not a symlink"
답변
어때요 readlink
?
# if symlink, readlink returns not empty string (the symlink target)
# if string is not empty, test exits w/ 0 (normal)
#
# if non symlink, readlink returns empty string
# if string is empty, test exits w/ 1 (error)
simlink? () {
test "$(readlink "${1}")";
}
FILE=/usr/mda
if simlink? "${FILE}"; then
echo $FILE is a symlink
else
echo $FILE is not a symlink
fi
답변
파일이 실제로 심볼릭 링크입니까? 그렇지 않은 경우 일반적인 존재 테스트는 -r
또는 -e
입니다.
참조하십시오 man test
.
답변
파일 존재를 테스트하는 경우 -L이 아닌 -e를 원합니다. -L은 심볼릭 링크를 테스트합니다.