이식 가능한 스크립트 를 개발 하고 싶지만 /bin/sh
내 환경 /bin/sh
이 /bin/bash
. 나는 (이제) 이러한 확장이 이식 가능하지 않다는 것을 알고 있지만 내가 사용하고 있던 다른 구문을 항상 사용할 수 있는 것은 아니라는 것을 몰랐습니다.--posix
/bin/bash
[[
$()
bash
/bin/sh
내 스크립트가 -isms를 사용하지 않는지 테스트하는 데 사용할 수 있는 이식 불가능한 구성을 거부하는 무료 구현이 있습니까 bash
?
답변1
bosh
POSIXified Bourne Shell은 어떻습니까?
여전히 일부 확장 기능이 있지만 잘 문서화되어 있습니다.
http://schilytools.sourceforge.net/man/man1/bosh.1.html
그것보다 조금 빠르고 dash
조금 느리기 ksh93
때문에 두 번째로 빠른 껍질입니다.
멀티바이트 문자 는 dash
지원되지 않으므로 소규모 임베디드 시스템에만 유용합니다.
BTW: bosh
동작을 세밀하게 구성할 수 있습니다. Solaris-10 호환 osh
릴리스는 에서 구할 수 있습니다 bosh
. Makefile
시간이 나면 Makefile
이 목적을 위한 사전 구성을 만들 수 있는지 알아볼 수도 있습니다.
업데이트: 지난 며칠 동안 나는 "bosh"의 새로운 컴파일된 변형을 만들고 이름을 "pbosh"로 지정했습니다. 이는 다음 예정된 schilytools 스냅샷에 포함될 예정이며, 2018년 6월 29일 또는 7월 2일에 출시될 가능성이 높습니다.
"pbosh"는 쉘 스크립트의 이식성을 테스트하기 위해 설계된 쉘입니다.
POSIX에 대한 확장을 구현하지 않으므로 POSIX 표준 외부에서 셸 기능을 사용하면 실패합니다.
"pbosh"와 함께 사용되는 스크립트는 지정되지 않은 일부 POSIX 기능으로 인해 다른 셸에서 여전히 실패할 수 있다는 점을 명심하세요. 한 가지 예는 파이프가 생성되는 방법입니다. "pbosh"는 최적화 방법을 구현하며 이것이 쉘 내장인 경우 쉘 프로세스 내의 파이프에서 가장 오른쪽 프로그램을 실행합니다. 따라서 "pbosh"와 함께 작동하는 모든 파이프라인은 "ksh93"에서도 작동하지만 "bash"에서는 여전히 실패할 수 있습니다.
스크립트가 Solaris 10에 있는 SVr4 Bourne Shell로 이식 가능한지 확인하려면 "osh"라는 schilytools의 다른 "bosh" 컴파일 변형으로도 실행되는지 확인하는 것이 좋습니다. 이것은 Solaris 10 SVr5 Bourne Shell의 휴대용 버전입니다.
참고: "pbosh"를 절반으로 유용하게 만들기 위해 영구 별칭은 기본적으로 비활성화되지 않습니다. 다른 셸을 사용하여 스크립트를 테스트하거나 Makefile을 편집하고 다음을 사용하여 다음 줄을 주석 처리할 수도 있습니다.
CPPOPTS += -DDO_GLOBALALIASES # Include persistent aliases in ~/.globals
CPPOPTS += -DDO_LOCALALIASES # Include persistent aliases in .locals
그런 다음 "make clean all"을 호출하여 "pbosh"를 다시 컴파일하고 영구 별칭을 비활성화합니다.