소스 `.filename`을 얻는 방법은 신뢰할 수 있나요?

소스 `.filename`을 얻는 방법은 신뢰할 수 있나요?

현재 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쉘까지 확장되어야 하는 경우를 제외하고는 아마도 도망칠 것입니다.

관련 정보