일부 답변에서 답변에 쉘 특정 명령을 피하는 것이 좋습니다 의견이 표시됩니다.
모든 쉘에 어떤 명령, 연산자 등이 있는지 어떻게 알 수 있습니까? 표준 목록이 있습니까?
man builtins
명령 목록을 제공합니다. 모든 쉘에서 작동하는 이식 가능한 쉘 스크립트에서 사용할 수있는 유일한 명령입니까?- 빌트인은 쉘 특정이 될 수 있습니까?
- 리눅스 표준이 다른 유닉스 표준과 다른가?
- 구문은 어떻습니까? 일부 셸에서 문장 부호, 연산자 등이 다를 수 있습니까?
답변
Greg의 Wiki 는 Dash 에 대한 bash 스크립트를 수정하는 것에 대한 게시물을 가지고 있으며 많은 ‘bashism’을 지적합니다. 비표준이지만 bash의 일부인 추가 기능입니다. 이러한 bashism을 피하면 스크립트가 다른 환경에 더 친숙해질 수 있습니다. 이것은 특히 귀하의 질문에 대한 답변입니다. 예를 들어, (와 같은 ==
) 다른 연산자가 있지만 모든 환경에서 작동하는 표준 Posix 세트가 있습니다.
더 철저하게 읽으려면 모든 쉘이 준수 해야하는 Posix 표준을 확인하십시오 . 특히 “Shell & Utilities”에 관한 책입니다.
쉘 차이점보다 더 어려운 점은 명령 차이점입니다. 많은 Linux 시스템에는 GNU find
가 있지만 이식 가능한 스크립트를 작성하는 경우 다른 기능 세트를 man find
가진 BSD와 함께 많은 시스템이 있기 때문에 독자적으로 의존하지 마십시오 find
. busybox에 대한 스크립트를 작성하는 경우 완전히 다른 버전이 있습니다 nc
. 그것들은 다른 환경에 스크립트를 배포 할 때 항상 나를 얻는 종류입니다.
훌륭한 쉘 스크립팅 실습에 대한 추가 정보는 David Pashley의 블로그 ( Robust Bash Shell Scripts 작성) 에 대한 유용한 자료도 있습니다.
또한 이 사이트에 대한 Gilles 답변과 의견을 읽으십시오 . 그는 휴대용 코드를 사용하는 방법에 대한 많은 팁을 제공합니다.
답변
특정 쉘에서 쉘 스크립트를 작성한다는 것은 해당 쉘이 설치되어 있음을 의미합니다. 유일한 표준은 것입니다 csh
및 sh
모든 유닉스 변종 이상 설치되어 있어야합니다. 따라서 스크립트를 Solaris, * BSD 및 GNU에서 실행하려면 Bourne 쉘에 스크립트를 작성해야합니다.
그러나 대부분의 Unix 명령은 구현 방식에 따라 구문이 다릅니다 ( ps
Solaris, FreeBSD 및 GNU에서 살펴보십시오). 사용하는 도구에 따라 스크립트가 이식성이 떨어질 수 있습니다. 쉘이 설치된 위치도 중요합니다. 그것은인가 /bin/bash
/usr/bin/bash
, /usr/local/bin/bash
또는 다른 곳?
쉘을 정의하는 표준을 모릅니다. 이상한 비표준 쉘에 대해서는 rc 또는 http : // 192.220.96.201 / es / es-usenix-winter93.html` “>을 살펴보십시오 . 그러나 여전히 일반적인 아이디어를 따르는 것 같습니다.