현재 POSIX 사양에서는 .
내장된 도트에 대한 옵션을 지정하지 않습니다.
내가 다음과 같은 일을 한다면:
$ echo 'echo .' > /tmp/-foo
$ PATH=/tmp "$shell" -c '. -foo'
그러면 다른 쉘의 결과가 다릅니다.
dash
,ash
,ksh88
, Bourne shell, schily sh, schily osh, heirloom sh가 잘 작동합니다.bash
,yash
,ksh93
,pdksh
,mksh
,posh
아니요.. -- -foo
이러한 쉘에서 실행 되도록 명령을 변경하십시오 .
게다가 사용하는 --
것은 비호환적인 방법이기 때문에POSIX 사양에 따르면내장형이 다음을 따르지 않습니다.유틸리티 구문 가이드무시됩니다 --
.
zsh
두 경우 모두에서 작동하는 유일한 쉘입니다.
. filename
그렇다면 Bourne이나 POSIX와 같은 셸에서 이것이 안정적으로 작동하도록 하려면 어떻게 해야 할까요 ?
답변1
쉘 관련 효과를 피하려면 전체 경로 를 .
.. /absolute/path/to/script
. relative/path/to/script
어쨌든 경로 조회는 소스 스크립트에 거의 유용하지 않습니다. PATH 조회가 필요한 경우 파일 이름이 로 시작하는 경우 수동으로 검색할 수 있습니다 . 또는 단순하게 유지하기 위해 -
파일 이름이 로 시작하지 않도록 요구할 수도 있습니다 .-
답변2
나는 이것이 부분적으로 이론적인 질문이라고 생각합니다.
포함된 스크립트의 첫 번째 문자가 되는 것을 피하거나 스크립트에 대한 경로(상대 또는 절대는 중요하지 않음)를 제공하여 실제로 -
안정적으로 작동하도록 할 수 있습니다.
다시 한 번 실용적인 관점에서 볼 때 저는 알려진 셸에 대한 코드를 작성하는 것을 선호하지만 이것이 가능하지 않으면 결국 case
함수 안에 포함된 보기 흉한 명령문으로 끝날 수도 있습니다. 일반화가 *csh
쉘까지 확장되어야 하는 경우를 제외하고는 아마도 도망칠 것입니다.