상황: 여러 셸에서 작업을 수행하는 셸 스크립트 작성
문제: Bourne 호환 셸 스크립트( bash
, ksh
, ash
, zsh
등)는 쉽게 이식 가능하지만(스크립트가 호환되고 다른 Bourne 호환 셸에서 실행되어야 하는지 확인하세요 ) 다음과 같은 sh
POSIX 호환 셸 스크립트는 아닙니다. . 구문 오류(예상)로 인해 이러한 셸에서 실행되면 스크립트가 즉시 실패합니다.csh
fish
질문: 개별 쉘의 POSIX 호환성에 관계없이 모든 쉘에서 실행될 수 있는 스크립트를 작성하는 방법이 있습니까? 구문 오류를 발생시키고 스크립트 자체를 종료시키지 않고 이 작업을 수행할 수 있는 방법은 생각할 수 없습니다.
답변1
간단하다: 쓰기오직을 위한 /bin/sh
. 그건보장하다(POSIX에 따라, 또한 전통에 따라) 존재합니다. 다른 껍질은 표면적으로 유사할 수도 있고 완전히 다를 수도 있습니다. 예를 들어 확인하십시오.껍질, (얇은) 후드 아래의 Perl 쉘, 또는구성표 쉘, LISPish 구문이 많이 사용됩니다.
Unix의 장점 중 하나는 쉘이 표준 사용자 수준 프로그램이라는 것입니다. 그러나 이는 모든 해커가 자신만의 미친 변형을 작성할 수 있음을 의미합니다. 모든 껍질 사이에 모호한 교차점을 작성하려는 시도는 실패할 운명입니다. 모든 "공통 껍질"에 대해 글을 쓴다는 것은 "공통"이 무엇을 의미하는지 정의하는 것을 의미합니다. 이는 누군가를 화나게 할 것입니다.