쉘 내장 명령을 구체적으로 실행하는 방법

쉘 내장 명령을 구체적으로 실행하는 방법

현재 셸에서 다음 명령을 실행하거나 해당 명령을 입력하는 상황을 생각해 보세요 .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 기능을 사용할 수 있습니다.builtincommandcommandPATHcommandunset -f source

builtin를 모두 재정의하거나 비활성화한 경우 이 셸 인스턴스를 적절한 상태로 복원하는 것을 포기할 수 있습니다.commandunset

관련 정보