나는 그것이 어디에 있을 수 있는지 찾으려고 노력하고 있습니다 $LD_LIBRARY_PATH
. 기본적으로 나는 다음을 시도하고 있습니다.
find $LD_LIBRARY_PATH -name "*libdl*"
그러나 변수에 여러 항목이 있고 my a 를 구분하기 때문에 위 명령은 실패합니다 :
. 오류가 발생합니다.
No such file or directory
어떻게 해야 하나요?
답변1
*PATH 변수는 콜론으로 구분된 디렉토리 목록이므로 단어 분할에 콜론을 사용할 수 있습니다.
이전 IFS를 저장하고 복원하려면 다음 줄의 주석 처리를 제거하십시오(권장).
#oldIFS="$IFS"
IFS=:
set -o noglob # disable the glob part of the split+glob operator
# unlikely to be needed as library directories
# are unlikely to have wildcard characters in their
# name.
find -H $LD_LIBRARY_PATH -mindpeth 1 -maxdepth 1 -name "*libdl*"
#IFS="$oldIFS"
#set +o noglob
-H
이러한 구성 요소 중 하나라도 심볼릭 링크인 경우 필수입니다 $LD_LIBRARY_PATH
. -mindepth 1
(GNU 확장, 현재는 다른 많은 구현에서 볼 수 있음) 구성 요소 자체 일치를 방지하고 -maxdepth
하위 디렉터리에서 검색을 건너뜁니다(동적 링커에서 검색할 의도가 없음).
Bash 약어는 기본값을 가정 $IFS
하고 디렉터리에 해당 기본값에 대한 문자 $IFS
(공백, 탭 및 줄 바꿈)나 와일드카드가 포함되어 있지 않은 것으로 알려져 있고 이러한 디렉터리 중 어느 것도 기호 링크도 하위 디렉터리도 없으며 이러한 이름은 디렉토리 자체가 패턴과 일치하지 않습니다:
find -H ${LD_LIBRARY_PATH//:/ } -name "*libdl*"
이것은바꾸기 명령각 콜론을 공백으로 변환합니다(ksh93에서 복사한 기능).
zsh
다음과 같은 가정을 하지 않고 를 사용하세요 .
print -rC1 - ${(s[:])^LD_LIBRARY_PATH}/*libdl*(ND)