openSUSE에서는 "which" 명령이 실제로 업데이트되며 별도의 애플리케이션일 가능성이 높지만 일부 다른 배포판에서는 내장 명령입니다.
그렇다면 PATH에 "which" 명령이 있으면 기본 내장 명령을 무시합니까?
이것이 cd 명령 및 기타 내장 명령에 적용됩니까?
답변1
질문이 많습니다. 답변해 봅시다:
"어느"가 내장 명령인가요?
예
- 일부 셸(csh, tcsh 및 zsh)에 내장된 명령
- (lksh, mksh, ksh93 및 attsh)의 별칭 추적(
type which
해시된 명령에 대해 쉘이 인쇄하는 내용(자세히 알아보기)) 및hash
- (dash, bash, yash)의 외부 애플리케이션.
그러므로 보편적으로 간단한 대답은 없습니다.
이를 무시할 수 있나요?
실행 순서는 항상 별칭, 특수 내장 함수(및 PATH에서 검색한 후), 일반 내장 함수 및 외부 유틸리티입니다.
씌우다:
- 특수 내장 함수는 별칭을 사용합니다.
- 일반 내장 기능은 별칭이나 함수를 사용합니다.
- PATH를 사용하는 경우 언제든지 다른 실행 파일보다 먼저 실행 파일을 추가할 수 있습니다.
- 또한 일부 쉘은 경로 검색에서 (%builtin)과 같은 추가 내장 컨트롤을 제공할 수 있습니다.Minix I (1989) 회색 쉘또는ksh, bash, zsh에서 활성화/비활성화
openSUSE에서 "which" 명령은 별도의 애플리케이션입니까?
예, Fedora, Debian 및 기타 여러 시스템에서도 마찬가지입니다. 그러나 이 점에 있어서 조개껍질은 특별한 발언권을 가지고 있을 수 있습니다.
다른 배포판에 내장된 명령인가요?
사용 가능한 파일을 결정하는 배포판보다 사용하는 셸에 더 많이 의존합니다. 배포판은 파일을 선택하고, 쉘은 내장 파일을 선택합니다.
경로의 "which" 명령이 기본 내장 명령을 재정의합니까?
아니요. 애플리케이션은 검색 순서에서 실행되는 마지막 요소이기 때문입니다.
이것은 cd 명령 및 기타 내장 명령에도 적용됩니까?
A cd
는정기적인내장되어 있으므로 별칭이나 함수로 재정의할 수 있습니다(Posix 용어로: 경로에 동일한 이름을 가진 실행 파일이 있는 경우에만).
답변2
which
zsh에는 내장되어 있지만 대부분의 다른 쉘에는 내장되어 있지 않습니다. zsh 및 Invoke를 사용하면 which
내장 셸을 사용하게 되는데, 이는 명령과 내장 셸이 동일한 이름을 공유할 때 나타나는 일반적인 동작입니다.
이 명령을 호출하려는 경우 POSIX는 command
이를 수행하기 위한 내장 명령을 제공합니다 command which
. 명령이 어디에 있는지 알고 싶다면 POSIX 방법을 이용하세요 command -v
.
답변3
다음을 사용하면 쉽게 찾을 수 있습니다 which
.
Fedora 32에서:
$ which which
alias which='(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot'
/usr/bin/which
$ rpm -qf /usr/bin/which
which-2.21-19.fc32.x86_64
따라서 별도의 명령입니다.
답변4
$ help
alias [-p] [name[=value] ... ] logout [n]
bg [job_spec ...] mapfile [-d delim] [-n count] [-O or>
bind [-lpsvPSVX] [-m keymap] [-f file> popd [-n] [+N | -N]
break [n] printf [-v var] format [arguments]
builtin [shell-builtin [arg ...]] pushd [-n] [+N | -N | dir]
caller [expr] pwd [-LP]
case WORD in [PATTERN [| PATTERN]...)> read [-ers] [-a array] [-d delim] [->
cd [-L|[-P [-e]] [-@]] [dir] readarray [-d delim] [-n count] [-O >
command [-pVv] command [arg ...] readonly [-aAf] [name[=value] ...] o>
compgen [-abcdefgjksuv] [-o option] [> return [n]
complete [-abcdefgjksuv] [-pr] [-DEI]> select NAME [in WORDS ... ;] do COMM>
compopt [-o|+o option] [-DEI] [name .> set [-abefhkmnptuvxBCHP] [-o option->
continue [n] shift [n]
coproc [NAME] command [redirections] shopt [-pqsu] [-o] [optname ...]
declare [-aAfFgilnrtux] [-p] [name[=v> source filename [arguments]
dirs [-clpv] [+N] [-N] suspend [-f]
disown [-h] [-ar] [jobspec ... | pid > test [expr]
echo [-neE] [arg ...] time [-p] pipeline
enable [-a] [-dnps] [-f filename] [na> times
eval [arg ...] trap [-lp] [[arg] signal_spec ...]
exec [-cl] [-a name] [command [argume> true
exit [n] type [-afptP] name [name ...]
export [-fn] [name[=value] ...] or ex> typeset [-aAfFgilnrtux] [-p] name[=v>
false ulimit [-SHabcdefiklmnpqrstuvxPT] [l>
fc [-e ename] [-lnr] [first] [last] o> umask [-p] [-S] [mode]
fg [job_spec] unalias [-a] name [name ...]
for NAME [in WORDS ... ] ; do COMMAND> unset [-f] [-v] [-n] [name ...]
for (( exp1; exp2; exp3 )); do COMMAN> until COMMANDS; do COMMANDS; done
function name { COMMANDS ; } or name > variables - Names and meanings of so>
getopts optstring name [arg] wait [-fn] [id ...]
hash [-lr] [-p pathname] [-dt] [name > while COMMANDS; do COMMANDS; done
help [-dms] [pattern ...] { COMMANDS ; }
root@machinexa:~# help | grep which
root@machinexa:~#
bash 내장 기능이 아닌 것은 무엇입니까? 내가 틀렸다면 의견을 말해주세요. 또한 경로를 보려면 /usr/bin과 같은 각 경로가 모든 경로로 대체되는지 env $PATH
확인할 수도 있습니다.ls /usr/bin/which