할 때
which python
, 입장 중입니다 (상태 /usr/bin/python
.
할 때
which python3
, 입장 중입니다 (상태 /usr/bin/python3
.
그러나 실행되면 alias python=/usr/bin/python3
여전히 which python
을 반환합니다 /usr/bin/python
.
이로 인해 bash 명령을 찾는 데 좀 더 복잡한 논리가 있다고 생각되지만 찾을 수 없습니다. 아마도 이름을 모르는 것 같습니다.
그렇다면 bash는 어떻게 명령을 찾나요?
댓글에 답변하려면 수정하세요.
출력 보기alias
noam@ML:~/src/uv-car-parts-segmentation$ which python
/usr/bin/python
noam@ML:~/src/uv-car-parts-segmentation$ which python3
/usr/bin/python3
noam@ML:~/src/uv-car-parts-segmentation$ alias python=/usr/bin/python3
noam@ML:~/src/uv-car-parts-segmentation$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias python='/usr/bin/python3'
noam@ML:~/src/uv-car-parts-segmentation$ which python
/usr/bin/python
이것은 문서입니다명령을 구문 분석하는 방법에 관해서는 이것이 이 문제에 대한 해결책이 아닌 것 같습니다.
답변1
which
일반적으로 해당 문제에 대한 쉘 별칭이나 쉘 기능에 대한 지식이 없는 외부 명령입니다. 에서 일치하는 명령 이름만 찾습니다 PATH
.
type python
별칭은 인식되며 type
모든 POSIXy 셸에서 작동합니다. 적어도 Bash와 다른 일부에서는 type -a
특정 이름의 모든 항목을 표시하는 데 사용할 수 있습니다. 그러나 별칭이 가리키는 위치를 추적하지 않고 별칭 없이 사용될 경로 이름만 표시합니다.
$ alias python=/usr/bin/python3
$ type -a python
python is aliased to '/usr/bin/python3'
python is /usr/bin/python
바라보다:" which "를 사용하지 않는 이유는 무엇입니까? 그러면 무엇을 사용해야 합니까?
Bash 자체는 명령줄 처리 초기에 별칭을 처리한 다음 확장 후 첫 번째 단어가 (1) 함수 (2) 내장 함수인지 (3) 외부 명령인지 확인합니다.
(첫 번째 단어가 인용되지 않은 리터럴 키워드가 아닌 if
경우 적절한 구문을 사용하여 구문 분석됩니다. 예를 들어 "if"
또는 /path/to/if
라는 외부 명령을 실행 해야 합니다 if
.)