나는 #!/bin/sh shebang을 사용하여 쉘 스크립트를 작성했습니다. 솔라리스에서는 작동하지 않는다고 들었습니다. Korn 쉘 스크립트를 작성해야 합니다.
그런데 스레드 중 하나에서 누군가가 상단의 shebang만 변경하면 변환이 가능하다고 언급했습니다. 이는 Solaris에서 sh가 위치한 다른 디렉토리를 가리킵니다.
이것이 사실인지 나는 알 길이 없으며, 당신이 나를 위해 그것을 명확히 해 주신다면 기쁠 것입니다.
이 접근 방식이 효과가 있을까요? 이것이 최선의 방법입니까?
답변1
스크립트가 이식 가능하다고 가정하면, 즉 bashisms, GNUisms 또는 POSIX가 아닌 것을 사용하지 않는다면 #!/bin/sh
shebang을 통해 대부분의 Unix 및 Linux 운영 체제에서 작동해야 합니다.
그러나 Solaris 10 및 이전 버전에는 /bin/sh
POSIX 쉘이 없지만 POSIX보다 이전 버전이고 나중에 표준과 함께 제공되는 기능이 부족한 이전 Bourne 쉘이 있습니다.
스크립트를 그대로 두면 문제가 발생할 수 있지만 POSIX 호환 Solaris 셸을 가리키도록 shebang을 설정하면 이 문제를 쉽게 해결할 수 있습니다.
#!/usr/xpg4/bin/sh
기본 Solaris 유틸리티와 다른 경우 POSIX 호환 유틸리티를 선택하려면 스크립트 초기에 다음 줄도 추가해야 합니다.
PATH=$(getconf PATH):PATH
답변2
그래 네가 맞아.
Solaris와 Linux에서는 상황이 다르기 때문에 단일 스크립트를 작성해야 하는 경우 이 방법을 사용할 수 있습니다.
#!/usr/bin/env sh
< Your Code>
이것은 작동합니다.
리눅스에서.
$which sh
/bin/sh
솔라리스에서.
$which sh
/usr/bin/sh
단일 스크립트에서 이 경로를 피하려면 env
다음 명령을 사용할 수 있습니다.