별칭과 함께 which 명령을 사용할 수 있습니까? [복사]

별칭과 함께 which 명령을 사용할 수 있습니까? [복사]

예:

나는 가지고있다 alias chrome='google-chrome'. 나는 which chrome같은 것을 반환 하고 싶습니다 which google-chrome. 즉:

/usr/bin/google-chrome

그게 가능합니까?

답변1

정말로 이 작업을 수행하려면 which이를 쉘 함수로 재정의할 수 있습니다.

which() {
  if [ -n "$(type "$1" | grep "is aliased")" ]; then
    command which $(type "$1" | awk '
      {cmd=gensub("[\140\047]", "", "g" , $NF);print cmd}')
  else
    command which "$1"
  fi
}

쉘이 이면 이 기능이 작동하지만 bash다른 쉘을 사용하는 경우 기능을 약간 수정해야 할 수도 있습니다.

답변2

이 목적으로 사용하지 마십시오. 더 좋은 방법은 which전혀 사용하지 않는 것입니다. 별칭 확장을 보는 which데 사용됩니다 . 주어진 명령이 나타낼 수 있는 모든 가능한 범주($PATH의 프로그램, 쉘 내장, 함수, 별칭)를 보는 type <alias_name>데 사용됩니다 . 예를 type -a <command>들어 참조하십시오 .type -a echo

편집하다:

alias <ALIAS_NAME>또한 이 양식을 사용하여 별칭 확장을 볼 수도 있습니다 . 예를 들면 다음과 같습니다.

$ alias chrome
alias chrome='google-chrome'

alias <ALIAS_NAME>='다음과 같이 구문 분석한 후 출력의 일부만 가져옵니다.

$ alias chrome | sed "s,alias !#:1=',," | sed "s,'$,,"

스크립트에서 이 작업을 수행하기 전에 alias <ALIAS_NAME>0을 반환하는지 확인하세요.

답변3

in은 과 동일한 효과를 갖는 명령 zsh입니다 . 나열된 각 명령이 비슷한 형식으로 해석되는 방식이 인쇄됩니다 .whichbuiltinwhence -ccsh

which내장된 기능이 없는 쉘에서. which별칭, 내장 기능, 기능을 모르며 PATH해당 이름을 가진 명령만 검색할 수 있습니다.

예는 다음과 같습니다 which echo. 인쇄할 수도 있지만 /bin/echoecho는 (보통) 내장 명령이기도 합니다. 이는 PATH.so보다 작으므로 쉘은 대신 내장 함수를 사용합니다 /bin/echo.

답변4

어떤 크롬과 어떤 google-chrome이 동일한 응답을 반환하는지 원하는 경우 크롬에 대한 별칭(별칭 chrome=/usr/bin/google-chrome)을 생성하면 됩니다. 별칭은 명령 전에 평가되므로 크롬에서 반환하는 명령의 내용이 변경됩니다.

관련 정보