대부분의 사용자와 마찬가지로 저는 일반적으로 사용되는 프로그램에 대한 기본 플래그 세트를 제공하기 위해 여러 개의 별칭을 설정했습니다. 예를 들어,
alias vim='vim -X'
alias grep='grep -E'
alias ls='ls -G'
문제는 내 / / 등이 어디에서 왔는지 which
확인하기 위해 이를 사용하려는 경우 별칭이 방해가 된다는 것입니다 .vim
grep
ls
$ which vim
vim: aliased to vim -X
이는 유용한 출력이지만 이 경우 내가 찾고 있는 출력은 아닙니다. vim
별칭이라는 것은 알지만 vim -X
어디에 있는지 알고 싶습니다.저것 vim
출신이다.
사용할 수 있도록 일시적으로 별칭 정의를 해제하는 것 외에 별칭을 "잠금 해제"하고 실행할 수 있는 which
쉬운 방법이 있습니까 ?which
편집하다:이것은 which
다른 쉘에서 다르게 동작하는 쉘 내장 함수인 것으로 보입니다. Bash에서는 SiegeX의 --skip-alias
플래그 제안이 작동하지만 저는 Zsh를 사용하고 있습니다. 비슷한 것이 거기에도 존재합니까?
답변1
which
$SHELL
이는 실제로 이와 같은 작업을 수행하는 나쁜 방법입니다. 왜냐하면 쉘이 사용하는 시작 파일(생각하는)을 기반으로 환경을 추측하기 때문입니다. 때로는 잘못 추측할 뿐만 아니라 다르게 작동하도록 지시할 방법도 없는 경우가 많습니다. (예를 들어 which
Ubuntu 10.10에서는 @SiegeX가 언급한 내용을 이해하지 못합니다.) 구성 파일을 보는 대신 현재 셸 환경을 사용하고 해당 환경의 일부를 무시하라는 메시지를 받을 수 있으므로 실제로 무슨 일이 일어나는지 보여줍니다. 무슨 일이 일어나는지, 기본 쉘이 재구축될 때 일어나는 일이 아닙니다.--skip-alias
type
이 경우 type -P
별칭이나 함수는 무시됩니다.
$ type -P vim
/usr/bin/vim
벗겨달라고 하셔도 됩니다모두한 번에 한 레이어씩 검색하여 무엇을 찾을 수 있는지 보여줍니다.
$ type -a vim
vim is aliased to `vim -X'
vim is /usr/bin/vim
(댓글을 기반으로 이에 대한 확장 :)
문제는 which
이것이 일반적으로 셸에 내장된 것이 아니라 외부 프로그램이라는 것입니다. 즉, 별칭이나 기능을 볼 수 없으며 셸의 시작/구성 파일에서 다시 생성해야 한다는 의미입니다. (만약 쉘 내장형이라면, zsh
쉘 bash
환경을 사용하고 올바른 일을 할 가능성이 더 높을 것입니다.)
type
내장 명령처럼 실행해야 하는 POSIX 호환 명령입니다(즉, 로컬 별칭 및 함수를 포함하여 이를 호출하는 셸의 환경을 사용해야 합니다).예내장된 것.
csh
일반적으로 / 에서는 발견 되지 않습니다 tcsh
. 비록 대부분의 최신 버전에서는 which
쉘 내장이고 올바른 일을 수행하지만 때로는 내장 이고 때로는 현재 쉘의 환경을 전혀 what
볼 수 있는 좋은 방법이 없습니다 .csh
tcsh
답변2
존재하다 bash
:
type -P vim
존재하다 zsh
:
type -p vim
동시에:
/usr/bin/which vim
또는:
( unalias vim; type vim )
답변3
zsh에서는 which
다음과 같은 내장 명령이 있습니다:
$ whence -w which
which: builtin
실행하다외부 명령(모든 쉘에서) which
, 사용전체 경로:
$ /bin/which ls; echo $?
/bin/ls
0
따라서 명령이 발견되고 ls
(종료 값 0으로) 위치가 지정됩니다 /bin/ls
.
내부 zsh
; 검색 방법(위의 방법에 추가)외부 명령예:
$ whence -p ls
/bin/ls
그러나 다음과 같은 중첩된 별칭은 해결되지 않습니다.
$ alias dire='ls -l'
dire
이 명령은 명령을 찾을 수 없음 을 보고합니다 .
$ whence -p dire; echo $?
1
중첩된 별칭을 수동으로 해결하려면 다음을 참조하세요.Resolve nested aliases to their source commands
답변4
또 다른 옵션은 다음과 command which vim
같은 방식으로 작동한다는 것입니다.zsh
bash
예를 들어 내 Mac에서는 다음과 같습니다.
LOLcalhost :: ~ % command which grep
/usr/local/bin/grep