예:
나는 가지고있다 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
입니다 . 나열된 각 명령이 비슷한 형식으로 해석되는 방식이 인쇄됩니다 .which
builtin
whence -c
csh
which
내장된 기능이 없는 쉘에서. which
별칭, 내장 기능, 기능을 모르며 PATH
해당 이름을 가진 명령만 검색할 수 있습니다.
예는 다음과 같습니다 which echo
. 인쇄할 수도 있지만 /bin/echo
echo는 (보통) 내장 명령이기도 합니다. 이는 PATH
.so보다 작으므로 쉘은 대신 내장 함수를 사용합니다 /bin/echo
.
답변4
어떤 크롬과 어떤 google-chrome이 동일한 응답을 반환하는지 원하는 경우 크롬에 대한 별칭(별칭 chrome=/usr/bin/google-chrome)을 생성하면 됩니다. 별칭은 명령 전에 평가되므로 크롬에서 반환하는 명령의 내용이 변경됩니다.