"어느"가 내장 명령인가요? 이를 무시할 수 있나요?

"어느"가 내장 명령인가요? 이를 무시할 수 있나요?

openSUSE에서는 "which" 명령이 실제로 업데이트되며 별도의 애플리케이션일 가능성이 높지만 일부 다른 배포판에서는 내장 명령입니다.

그렇다면 PATH에 "which" 명령이 있으면 기본 내장 명령을 무시합니까?

이것이 cd 명령 및 기타 내장 명령에 적용됩니까?

노트:https://software.opensuse.org/package/which

답변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

whichzsh에는 내장되어 있지만 대부분의 다른 쉘에는 내장되어 있지 않습니다. 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

관련 정보