![PATH를 횡설수설로 변경하면서도 계속 명령을 사용할 수 있는 이유는 무엇입니까?](https://linux55.com/image/172520/PATH%EB%A5%BC%20%ED%9A%A1%EC%84%A4%EC%88%98%EC%84%A4%EB%A1%9C%20%EB%B3%80%EA%B2%BD%ED%95%98%EB%A9%B4%EC%84%9C%EB%8F%84%20%EA%B3%84%EC%86%8D%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
환경 변수 PATH는 실행 가능한 명령에 대한 검색 경로이므로 PATH를 존재하지 않는 변수(예: export PATH=blah
)로 변경하면 명령을 사용할 수 없을 것이라고 생각했습니다.
변경한 후에는 모든 명령을 사용할 수 없습니다(예: 사용할 수 없음 ls
). 하지만 분명히 여전히 많은 명령을 사용할 수 있고 계속 사용 export
하고 다시 변경할 수 있습니다.
검색 경로에서 모든 명령을 실행할 수 있지 않습니까? 아직 사용 가능한 이러한 명령의 실행 파일은 어디에 있습니까? 왜곡된 검색 경로를 계속 사용할 수 있는 이유는 무엇입니까?
답변1
셸 내부의 명령인 내장 명령을 계속 실행할 수 있으므로 실행 파일의 지원이 필요하지 않습니다.
예를 들어, 쉘이 이면 다음 bash
을 볼 수 있습니다. https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html
셸 내부에 영향을 미치는 일부 명령( cd
예 exec
: ) exit
은 예상대로 작동하지 않거나 전혀 작동하지 않기 때문에 외부 바이너리에서 제공할 수 없습니다.
답변2
귀하의 쉘이 bash
, 쉘 내장 함수, 쉘 키워드, 쉘 내장 함수와 같은 쉘 별명이 많이 있다고 가정하십시오.
alias, bg, bind, break, builtin, case, cd, command, compgen, complete, continue, declare, dirs, disown, echo, enable, eval, exec, exit, export, fc, fg, getopts, hash, help, history, if, jobs, kill, let, local, logout, popd, printf, pushd, pwd, read, readonly, return, set, shift, shopt, source, suspend, test, times, trap, type, typeset, ulimit, umask, unalias, unset, until, wait, while
다음은 여전히 유효합니다.
echo "Hello, world!'
cd /opt
printf '%s\n' /home/user/*
exit