
현재 셸에서 이러한 명령을 실행하거나 내부에 넣는 상황을 생각해 보세요 .bashrc
.
alias source='echo hi'
alias .='echo hi'
alias unalias='echo hi'
또는 function source(){ echo hi; }
등.
바이너리 명령의 경우 다음과 같은 절대 경로를 사용할 수 있습니다. /bin/ls
그러나 현재 쉘 내에서 이러한 쉘 내장 명령을 어떻게 구체적으로 실행할 수 있습니까?
답변1
Bash에는 다음 명령이 있습니다 builtin
.
builtin: builtin [shell-builtin [arg ...]]
Execute shell builtins.
Execute SHELL-BUILTIN with arguments ARGs without performing command
lookup.
예:
$ cat > hello.sh
echo hello
$ source() { echo x ; }
$ source hello.sh
x
$ builtin source hello.sh
hello
그러나 재정의하는 것을 방해하는 것은 없습니다 builtin
.
함수가 아닌 별칭을 해결하는 또 다른 방법은 다음 단어를 인용하는 것입니다.
$ alias source="echo x"
$ source hello.sh
x hello.sh
$ \source hello.sh
hello
답변2
명령 이름의 일부를 인용하여 별칭을 항상 무시할 수 있습니다(예: \source
or 'source'
또는 ''source
또는 ...)( zsh
다른 쉘에서는 허용되지 않는 별칭을 정의하지 않은 경우).
모든 POSIX 셸에서 command
접두사(예: ) 를 사용하면 함수를 우회할 수 있습니다 . bash 또는 zsh에서는 내장 기능을 강제로 사용하는 대신 command source
사용할 수 있습니다 ( 해당 이름의 내장 기능이 없으면 조회 로 돌아가고 , zsh에서는(다른 쉘을 에뮬레이트하는 경우 제외) 내장 기능을 모두 건너뜁니다). 예를 들어 기능을 설정 해제할 수 있습니다 .builtin
command
command
PATH
command
unset -f source
builtin
, command
및 모두를 재정의하거나 비활성화한 경우 unset
이 셸 인스턴스를 적절한 상태로 복원하려는 아이디어를 포기해야 할 수도 있습니다.