심볼릭 링크가 잘못된 디렉토리를 선택함

심볼릭 링크가 잘못된 디렉토리를 선택함

이 스크립트가 잘못된 심볼릭 링크를 생성하려는 이유를 설명할 수 있는 사람이 있습니까?

주요 문제는 다음 줄에 있습니다.

ln -s ${src}/${lib} ${dest64}/${lib}

다음과 같은 오류가 발생하기 때문입니다.

ln: creating symbolic link `/usr/lib64/libpgtypes.so/libpgtypes.so': File exists

그러나 에코 메시지에 따르면 실제 변수/링크는 다음과 같아야 합니다.

/usr/lib64/libpgtypes.so

다음은 스크립트 실행 결과입니다.

[root@server dir]# sh myscript.sh
Symbolic link already created from /opt/rh/rh-postgresql94/root/usr/lib64/libpgtypes.so to /usr/lib/libpgtypes.so

ln -s /opt/rh/rh-postgresql94/root/usr/lib64/libpgtypes.so /usr/lib64/libpgtypes.so
ln: creating symbolic link `/usr/lib64/libpgtypes.so/libpgtypes.so`: File exists
Created symbolic link from /opt/rh/rh-postgresql94/root/usr/lib64/libpgtypes.so to /usr/lib/libpgtypes.so

스크립트의 코드는 다음과 같습니다: #!/bin/bash

libraries=('libpgtypes.so')

src="/opt/rh/rh-postgresql94/root/usr/lib64"
dest="/usr/lib"
dest64="/usr/lib64"

for lib in ${libraries[*]}; do
    if [ -f ${dest}/${lib} ]; then
        echo "Symbolic link already created from ${src}/${lib} to ${dest}/${lib}"
    else
        ln -s ${src}/${lib} ${dest}/${lib}
        echo "Created symbolic link from ${src}/${lib} to ${dest}/${lib}"
    fi

    if [ -f ${dest64}/${lib} ]; then
        echo "Symbolic link already create from ${src}/${lib} to ${dest64}/${lib}"
    else
        echo "ln -s ${src}/${lib} ${dest64}/${lib}"
        ln -s ${src}/${lib} ${dest64}/${lib}
        echo "Created symbolic link from ${src}/${lib} to ${dest}/${lib}"
    fi
done

답변1

/usr/lib64/libpgtypes.so이것은 시스템의 디렉토리인 것 같습니다 . (이게 맞는지 틀린지는 말씀드릴 수 없습니다.)


그런데 좋은 코딩 습관으로 모든 변수에 큰따옴표를 사용하는 것이 좋습니다.

대신에 ln -s ${src}/${lib} ${dest64}/${lib}를 작성해야 합니다 . 이렇게 하면 루프를 올바르게 ln -s "${src}/${lib}" "${dest64}/${lib}"처리할 수도 있습니다 . ( 대신 참고하세요 )forfor lib in "${libraries[@]}"; do ... done@*

답변2

-hdest가 심볼릭 링크인지 확인하는 데 사용됩니다 . 예를 들어 다음을 사용하여 다른 모든 유형을 삭제할 수 있습니다.

if ! [ -h "${dest}/${lib}" ]; then
    rm -rf "${dest}/${lib}"
fi

답변3

/usr/lib64/libpgtypes.so경로에 디렉터리가 있어야 합니다. 오류를 방지하려면 삭제하거나 이름을 변경한 후 스크립트를 다시 실행하세요.

관련 정보