나는 대부분이 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
.