이것은 "있는 것처럼"규칙입니다.
간단히 말해 : 구현에서 표준 외부 명령을 셸 내장으로도 사용하기로 결정한 경우 사용자가 볼 때 셸의 동작은 변경되지 않아야합니다.
PD Korn, MirBSD Korn 및 Heirloom Bourne 쉘의 동작 사이 에서 /unix//a/496291/5132 에서 보여준 대조 ; (반면) Z, 93 Korn, Bourne Again 및 Debian Almquist 포탄; 와타나베 껍질은 이것을 강조합니다.
이없는 쉘의 경우 printf
와 같은 내장, 제거 /usr/bin
에서하는 PATH
의 호출하게 printf
정지 작업을. Watanabe 쉘이 준수 모드로 표시 한 POSIX 준수 동작은 동일한 결과를 발생시킵니다. printf
내장 된 쉘의 동작은 마치 외부 명령을 호출하는 것과 같습니다 .
부적합한 모든 쉘의 동작 /usr/bin
은에서 제거 된 경우 변경되지 않으며 외부 명령을 호출하는 것처럼 동작 PATH
하지 않습니다 .
표준이 보증하려고하는 것은 쉘이 모든 종류의 일반적으로 외부 명령을 내장하거나 자체 쉘 함수로 구현할 수 있다는 것입니다. PATH
명령이 발견되지 않도록 조정 하는 경우 외부 명령을 사용하십시오 . PATH
호출 할 수있는 명령을 선택하고 제어하기위한 도구로 남아 있습니다.
( /unix//a/448799/5132 에서 설명했듯이 사람들은 몇 년 전 사람들이 무엇이 바뀌 었는지 변경하여 유닉스의 성격을 선택했습니다 PATH
.)
명령을 찾을 수 있는지 여부에 관계없이 항상 명령이 작동하도록 하는 PATH
것은 실제로는 일반적으로 외부 명령을 내장하는 것입니다. (이것이 내 nosh 툴셋 printenv
이 사실 버전 1.38에서 내장 명령을 얻은 이유입니다. 이것은 쉘 이 아닙니다 .)
그러나 표준은 쉘에서 제공 되지 않는 일반 외부 명령에 대해 동일한PATH
쉘이 아닌 다른 프로그램에서 execvpe()
함수 를 호출하는 것과 동일한 동작을 보이며 쉘이 마술처럼 할 수 없다는 것을 보증합니다 다른 프로그램이 동일하게 찾을 수없는 일반 외부 명령을 실행하십시오 PATH
. 모든 것이 사용자의 관점에서 일관되게 PATH
작동하며 작동 방식을 제어하는 도구입니다.
추가 자료