쉘이 아닌 것은 무엇입니까? 쉘 특정 명령을 피하는

일부 답변에서 답변에 쉘 특정 명령을 피하는 것이 좋습니다 의견이 표시됩니다.

모든 쉘에 어떤 명령, 연산자 등이 있는지 어떻게 알 수 있습니까? 표준 목록이 있습니까?

  • man builtins명령 목록을 제공합니다. 모든 쉘에서 작동하는 이식 가능한 쉘 스크립트에서 사용할 수있는 유일한 명령입니까?
  • 빌트인은 쉘 특정이 될 수 있습니까?
  • 리눅스 표준이 다른 유닉스 표준과 다른가?
  • 구문은 어떻습니까? 일부 셸에서 문장 부호, 연산자 등이 다를 수 있습니까?


답변

Greg의 WikiDash대한 bash 스크립트를 수정하는 것에 대한 게시물을 가지고 있으며 많은 ‘bashism’을 지적합니다. 비표준이지만 bash의 일부인 추가 기능입니다. 이러한 bashism을 피하면 스크립트가 다른 환경에 더 친숙해질 수 있습니다. 이것은 특히 귀하의 질문에 대한 답변입니다. 예를 들어, (와 같은 ==) 다른 연산자가 있지만 모든 환경에서 작동하는 표준 Posix 세트가 있습니다.

더 철저하게 읽으려면 모든 쉘이 준수 해야하는 Posix 표준을 확인하십시오 . 특히 “Shell & Utilities”에 관한 책입니다.

쉘 차이점보다 더 어려운 점은 명령 차이점입니다. 많은 Linux 시스템에는 GNU find가 있지만 이식 가능한 스크립트를 작성하는 경우 다른 기능 세트를 man find가진 BSD와 함께 많은 시스템이 있기 때문에 독자적으로 의존하지 마십시오 find. busybox에 대한 스크립트를 작성하는 경우 완전히 다른 버전이 있습니다 nc. 그것들은 다른 환경에 스크립트를 배포 할 때 항상 나를 얻는 종류입니다.

훌륭한 쉘 스크립팅 실습에 대한 추가 정보는 David Pashley의 블로그 ( Robust Bash Shell Scripts 작성) 에 대한 유용한 자료도 있습니다.

또한 이 사이트에 대한 Gilles 답변과 의견을 읽으십시오 . 그는 휴대용 코드를 사용하는 방법에 대한 많은 팁을 제공합니다.


답변

특정 쉘에서 쉘 스크립트를 작성한다는 것은 해당 쉘이 설치되어 있음을 의미합니다. 유일한 표준은 것입니다 cshsh모든 유닉스 변종 이상 설치되어 있어야합니다. 따라서 스크립트를 Solaris, * BSD 및 GNU에서 실행하려면 Bourne 쉘에 스크립트를 작성해야합니다.

그러나 대부분의 Unix 명령은 구현 방식에 따라 구문이 다릅니다 ( psSolaris, FreeBSD 및 GNU에서 살펴보십시오). 사용하는 도구에 따라 스크립트가 이식성이 떨어질 수 있습니다. 쉘이 설치된 위치도 중요합니다. 그것은인가 /bin/bash /usr/bin/bash, /usr/local/bin/bash또는 다른 곳?

쉘을 정의하는 표준을 모릅니다. 이상한 비표준 쉘에 대해서는 rc 또는 http : // 192.220.96.201 / es / es-usenix-winter93.html` “>을 살펴보십시오 . 그러나 여전히 일반적인 아이디어를 따르는 것 같습니다.


답변