다양한 종류의 쉘이 있으므로 bash와 쉘 스크립트의 차이점은 무엇입니까? 모든 Unix 쉘에서 실행되는 호환 가능한 스크립트를 작성하는 것이 가능합니까?
답변1
스크립트 bash
는 Bourne-Again SHell에서 해석되는 스크립트이므로 쉘 스크립트입니다. 다른 쉘에서는 성공적으로 실행될 수도 있고 실행되지 않을 수도 있습니다. 특정 구문을 사용하면 bash
다른 셸에서도 작동하는지 알 수 없습니다.
모든 셸에서 해석할 수 있는 스크립트를 작성하려면 POSIX 표준에 설명된 구문을 사용해야 합니다.쉘 명령 언어. 당연히 아니지모두쉘은 POSIX 표준을 따르지만 이것이 최선의 방법입니다. 이러한 스크립트는 이식성이 매우 뛰어나며 많은 Linux 및 *nix 시스템에서 오류 없이 동일한 방식으로 실행될 수 있습니다.
많은 셸 및 명령줄 도구는 이라는 환경 변수를 찾습니다 $POSIXLY_CORRECT
. 설정된 경우 이러한 도구는 POSIX 호환 도구처럼 작동합니다.
또 다른 시도는 --posix
플래그입니다. 예를 들어, GNU에는 모든 GNU 확장을 비활성화하고 posix처럼 동작하는 sed
플래그가 있습니다 .--posix
sed
sed
bash
지원 --posix
및 $POSIXLY_CORRECT
변수.
이런 방식으로 스크립트를 작성하고 posix 호환 셸을 사용하여 테스트하면 가장 좋은 위치에 있습니다.
답변2
Bash는 Bourne Shell과 ksh88(일부 ksh93도 있음) 기능 클론의 혼합입니다.
오늘날 "쉘"은 너무 부정확한 용어입니다...
Bash 스크립트는 공급업체의 고유한 bash
구현 기능을 활용하는 스크립트입니다.
이식 가능한 스크립트 작성을 선호하는 경우 다음 두 가지 접근 방식이 있습니다.
1) POSIX 호환 스크립트를 작성하지만 모든 플랫폼에서 POSIX 셸을 호출하는 방법을 알아야 합니다. 을 호출해도 POSIX 쉘을 얻을 수는 없습니다 /bin/sh
. PATH를 사용하지 않고 getconf PATH
then 호출의 출력 으로 PATH를 설정해야 할 것입니다. sh
설치된 스크립트에서는 이것이 유용하지 않다는 것을 알게 될 것입니다...
2) Bourne Shell과 호환되는 스크립트를 작성합니다. 이 스크립트는 거의 모든 셸(기본적으로 Bourne Shell 기반)에서 사용할 수 있습니다. 따라서 최소한의 기능 세트와 제한적인 가정으로 자신을 제한하십시오.
스크립트의 이식성을 확인하려면 SYSVr4 Bourne Shell 구현을 사용하여 스크립트를 확인하는 것이 좋습니다. SVr4 Bourne Shell의 휴대용 버전은 Schily Tools tarball에 있습니다:
http://sourceforge.net/projects/schilytools/files/
라는 바이너리를 컴파일하고 검사합니다 osh
. 이것은 휴대용 SVr4 Bourne Shell입니다.