나는 대부분이 which명령에 익숙하다고 생각 하며 자주 사용합니다. 나는 얼마나 많은 어디서 명령 내 경로에 처음있는 그냥 궁금하지 않아요 상황에 달려 있지만, 모든 내 모든 경로의 명령이다. 나는 어떤 매뉴얼 페이지를 입력 해 보았지만 (타이핑 man which은 웃었다) 아무것도 보지 못했다.
which -a있습니다.
나는 대부분이 which명령에 익숙하다고 생각 하며 자주 사용합니다. 나는 얼마나 많은 어디서 명령 내 경로에 처음있는 그냥 궁금하지 않아요 상황에 달려 있지만, 모든 내 모든 경로의 명령이다. 나는 어떤 매뉴얼 페이지를 입력 해 보았지만 (타이핑 man which은 웃었다) 아무것도 보지 못했다.
which -a있습니다.
답변:
일부 시스템 which -a에서는 모든 일치 항목을 표시합니다. 쉘이 bash 또는 zsh¹ 인 경우 type대신 사용할 수 있습니다 . type foo첫 번째 일치를 type -a foo표시하고 모든 일치를 표시합니다. 세 가지 명령 type, which그리고 whence대부분 같은 일을; 가용성, 옵션 및보고 내용에 따라 셸과 운영 체제가 다릅니다. type항상 사용 가능하며 가능한 모든 명령과 유사한 이름 (별칭, 키워드, 셸 내장, 기능 및 외부 명령)을 표시합니다.
모든 경기를 표시 할 수있는 완전 휴대용 방법은 $PATH자신 을 파싱하는 것입니다. 이 작업을 수행하는 쉘 스크립트가 있습니다. 당신이 그것을 쉘 기능을 한 경우, (의 변경 그래서 괄호 안에 함수 본문을 둘러싸 있는지 확인 IFS하고 set -f, 변경 기능을 탈출하지 않음) exit에 return.
#!/bin/sh
set -f # disable globbing
IFS=: # break words at : only
not_found=1
for d in $PATH; do
if [ -f "$d/$x" ] && [ -x "$d/$x" ]; then
printf '%s\n' "$d/$x"
not_found=0
fi
done
exit $not_found
¹ 또는 설명서에 따르면 ksh 93이지만 ksh 93s + 2008-01-31은 시도 할 때 첫 번째 일치 항목 만 인쇄합니다.
sh에 빈 구성 요소가 있으면 해당 코드가 제대로 작동하지 않습니다 $PATH. 또한 POSIX 셸에서 $IFS필드 구분 기호 인 반면 $PATH콜론은 필드 구분 기호 로 사용됩니다 . which올바른 구현 방법은 데비안에있는 스크립트를 참조하십시오 .
type의 내장은 ksh93u+ 2012-08-01제대로 작동하는 것 같다.
--all 또는 -a 플래그는 경로의 모든 일치 항목 및 별명 (적어도 Fedora, Ubuntu 및 CentOS에서)을 표시합니다.
which -a which
AIX 및 Solaris에서 다음을 수행하십시오.
echo "$PATH" | sed -e 's/:/ /g' | \
while read -r p; do find "$p" -type f -name "which"; done
$PATH공백이나 셸 글러브 문자가 포함되어 있으면 스크립트가 작동하지 않습니다 . read -r백 슬래시에 대처하는 데 필요합니다. find디렉토리에 $PATH하위 디렉토리가 포함되어 있으면 시간이 오래 걸리고 허위 일치 항목을 반환 할 수 있으므로이 방법은 좋지 않습니다 . 다행히도 find여기서는 유용하지 않습니다. 내 대답을 참조하십시오.
which지원 -a이 없거나 whence사용할 수 없는 경우 직접 롤백하십시오.
#!/bin/sh -f
IFS=":"
for PART in $PATH
do
if test -x "$PART/$1"
then
echo $PART/$1
fi
done
set -f보호되지 않은에 대한 글러브 기능을 해제 할 수 없습니다 $PATH. test -f여기서는 실행 파일 만 원하므로 충분하지 않습니다. 당신은 필요합니다 test -x. 흠, 나는 내 스크립트에서 정기적 인 파일 테스트를 잊었다는 것을 알고있다.
whence README.txt가능성이 적습니다 whence "file* wi?h we!rd name". 순회하는 것이 얼마나 쉬운 지 보여 주려고 노력하는 것뿐입니다 $PATH.
which --all.