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

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

현재 셸에서 이러한 명령을 실행하거나 내부에 넣는 상황을 생각해 보세요 .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

명령 이름의 일부를 인용하여 별칭을 항상 무시할 수 있습니다(예: \sourceor 'source'또는 ''source또는 ...)( zsh다른 쉘에서는 허용되지 않는 별칭을 정의하지 않은 경우).

모든 POSIX 셸에서 command접두사(예: ) 를 사용하면 함수를 우회할 수 있습니다 . bash 또는 zsh에서는 내장 기능을 강제로 사용하는 대신 command source사용할 수 있습니다 ( 해당 이름의 내장 기능이 없으면 조회 로 돌아가고 , zsh에서는(다른 쉘을 에뮬레이트하는 경우 제외) 내장 기능을 모두 건너뜁니다). 예를 들어 기능을 설정 해제할 수 있습니다 .builtincommandcommandPATHcommandunset -f source

builtin, command및 모두를 재정의하거나 비활성화한 경우 unset이 셸 인스턴스를 적절한 상태로 복원하려는 아이디어를 포기해야 할 수도 있습니다.

관련 정보