현재 셸에서 다음 명령을 실행하거나 해당 명령을 입력하는 상황을 생각해 보세요 .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
또는 'source'
또는 ... 와 같은 명령 이름의 일부를 인용하여 별칭을 항상 무시할 수 있습니다 ''source
(다른 쉘에서는 허용되지만 zsh
허용되지 않는 별칭을 정의하지 않는 한).
command
와 같은 접두사를 사용하여 POSIX 셸에서 함수를 우회할 수 있습니다 . bash 또는 zsh에서는 내장 기능을 강제하는 대신 command source
사용할 수 있습니다 (해당 이름의 내장 기능이 없는 경우 대체 기능을 조회하는 반면, zsh에서는(다른 쉘을 시뮬레이션하는 경우 제외) 내장 기능을 완전히 건너뜁니다). 예를 들어 unset 기능을 사용할 수 있습니다.builtin
command
command
PATH
command
unset -f source
및 builtin
를 모두 재정의하거나 비활성화한 경우 이 셸 인스턴스를 적절한 상태로 복원하는 것을 포기할 수 있습니다.command
unset