쉘에 특정하지 않은 것은 무엇입니까?

쉘에 특정하지 않은 것은 무엇입니까?

일부 답변 아래에는 답변에서 셸 특정 명령을 피하라는 의견이 표시됩니다.

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

  • man builtins명령 목록을 제공합니다. 이것이 모든 쉘에서 작동하는 휴대용 쉘 스크립트에서 사용할 수 있는 유일한 명령입니까?
  • 내장이 쉘에 특정할 수 있습니까?
  • Linux 표준은 다른 Unix 표준과 어떻게 다릅니까?
  • 문법은 어떻습니까? 구두점, 연산자 등이 특정 쉘에서 다를 수 있습니까?

답변1

그렉의 위키하나 있다Dash용 bash 스크립트 적용에 대한 게시물이는 비표준이지만 bash의 일부인 추가 기능인 "bashism"이 많이 있음을 나타냅니다. 이러한 공격을 피하면 스크립트를 다양한 환경에 더 친숙하게 만드는 데 도움이 됩니다. 이것은 특히 귀하의 질문 중 일부에 대한 답변입니다. 예, 일부 연산자는 다르지만(예 ==: ) 모든 환경에서 작동하는 표준 Posix 세트가 있습니다.

더 포괄적인 내용을 보려면 다음을 확인하세요.POSIX 표준, 모든 쉘은 이를 준수해야 합니다. 특히 "쉘 및 유틸리티" Vol.

쉘의 차이점보다 더 어려운 점은 명령의 차이점입니다. 많은 Linux 시스템에는 GNU가 함께 제공되지만 이식 가능한 스크립트를 작성하는 경우 다른 기능 세트를 가진 BSD를 사용하는 시스템이 많기 때문에 find자체 스크립트에 의존하지 마십시오 . busybox에 대한 스크립트를 작성하는 경우 버전마다 완전히 다른 가 있음을 알 수 있습니다 . 스크립트를 다른 환경에 배포할 때 이러한 문제는 항상 나를 혼란스럽게 합니다.man findfindnc

좋은 쉘 스크립팅 방법에 대한 추가 정보를 보려면 David Pashley의 블로그에 훌륭한 리소스가 있습니다.강력한 Bash 쉘 스크립트 작성

또한 꼭 읽어보세요.자일스이 사이트에 대한 답변과 의견입니다. 그는 이식 가능한 코드를 사용하고 있는지 확인하기 위한 많은 팁을 가지고 있습니다.

답변2

특정 쉘에 쉘 스크립트를 작성한다는 것은 해당 쉘이 설치된다는 의미입니다. 유일한 기준은 모든 Unix 변형에 이를 보유 csh하고 설치하는 것입니다. sh따라서 스크립트를 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`">es. 그러나 이는 여전히 몇 가지 일반적인 아이디어에 맞는 것 같습니다.

관련 정보