`어떤`이지만 모두 대부분이 which명령에 익숙하다고 생각 하며 자주

나는 대부분이 which명령에 익숙하다고 생각 하며 자주 사용합니다. 나는 얼마나 많은 어디서 명령 내 경로에 처음있는 그냥 궁금하지 않아요 상황에 달려 있지만, 모든 내 모든 경로의 명령이다. 나는 어떤 매뉴얼 페이지를 입력 해 보았지만 (타이핑 man which은 웃었다) 아무것도 보지 못했다.



답변

일부 시스템 which -a에서는 모든 일치 항목을 표시합니다. 쉘이 bash 또는 zsh¹ 인 경우 type대신 사용할 수 있습니다 . type foo첫 번째 일치를 type -a foo표시하고 모든 일치를 표시합니다. 세 가지 명령 type, which그리고 whence대부분 같은 일을; 가용성, 옵션 및보고 내용에 따라 셸과 운영 체제가 다릅니다. type항상 사용 가능하며 가능한 모든 명령과 유사한 이름 (별칭, 키워드, 셸 내장, 기능 및 외부 명령)을 표시합니다.

모든 경기를 표시 할 수있는 완전 휴대용 방법은 $PATH자신 을 파싱하는 것입니다. 이 작업을 수행하는 쉘 스크립트가 있습니다. 당신이 그것을 쉘 기능을 한 경우, (의 변경 그래서 괄호 안에 함수 본문을 둘러싸 있는지 확인 IFS하고 set -f, 변경 기능을 탈출하지 않음) exitreturn.

#!/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 -azsh에서 원하는 것을 수행합니다.

 7:27AM 7 % whence -a cat
/usr/bin/cat
/bin/cat
/usr/bin/cat
/bin/cat

zsh에서 PATH를 정리해야합니다. 복제본이 많이 있습니다. whence -aksh에서 다르게 작동합니다.

$ whence -a cat
cat is a tracked alias for /usr/bin/cat

나는 그것이 잠재적으로 유용한 행동처럼 보인다고 말해야합니다.


답변