나는 대부분이 which
명령에 익숙하다고 생각 하며 자주 사용합니다. 나는 얼마나 많은 어디서 명령 내 경로에 처음있는 그냥 궁금하지 않아요 상황에 달려 있지만, 모든 내 모든 경로의 명령이다. 나는 어떤 매뉴얼 페이지를 입력 해 보았지만 (타이핑 man which
은 웃었다) 아무것도 보지 못했다.
답변
일부 시스템 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은 시도 할 때 첫 번째 일치 항목 만 인쇄합니다.
답변
–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
답변
which
지원 -a
이 없거나 whence
사용할 수 없는 경우 직접 롤백하십시오.
#!/bin/sh -f
IFS=":"
for PART in $PATH
do
if test -x "$PART/$1"
then
echo $PART/$1
fi
done
답변
ksh 및 zsh에는 쉘 내장으로 “whence”가 있습니다. whence -a
zsh에서 원하는 것을 수행합니다.
7:27AM 7 % whence -a cat
/usr/bin/cat
/bin/cat
/usr/bin/cat
/bin/cat
zsh에서 PATH를 정리해야합니다. 복제본이 많이 있습니다. whence -a
ksh에서 다르게 작동합니다.
$ whence -a cat
cat is a tracked alias for /usr/bin/cat
나는 그것이 잠재적으로 유용한 행동처럼 보인다고 말해야합니다.