이동성을 위해 다음과 같이 안전하게 가정 할 수 있습니다. #!/bin/sh
는 모든 표준 Unix 또는 Linux 시스템에서 대부분 POSIX 호환 셸을 찾을 수 있지만 그게 전부입니다.
FreeBSD, OpenBSD 및 NetBSD ( DragonFly, PC-BSD 및 기타 파생 제품과 함께 bash는 /usr/local/bin/bash
(설치된 경우)에 있으므로 /usr/bin/env
접근 방식은 Linux와 BSD 간의 이식성을 제공합니다.
Android는 표준 Unix 또는 Linux 시스템이 아닙니다. 루팅되지 않은 Android 휴대 전화에서는 /usr/bin/env
, /bin/bash
o r 심지어 /bin/sh
가 존재하고 시스템 셸은 /system/bin/sh
입니다.
(shebang)은 일부 시스템에서 호출 한 셸에서 실행을 시도하거나 다른 기본 인터프리터 (예 : /bin/bash
)를 사용할 수 있습니다. , 다른 시스템에서. 그리고 이 는 Android에서 작동 할 수 있지만 사용자가 bash
. (기본 셸인 FreeBSD에서 tcsh를 사용하고 shebang-less 스크립트는 호출하는 셸에 의해 해석됩니다.)
그래서 내가 앉아있는 곳에서는 Android와 비 Android (Linux 또는 Unix) 시스템간에 이식 가능한 셸 스크립트를 만드는 것은 불가능합니다 . Android는 작업이 다르기 때문입니다.
댓글
내 경험상 #!/bin/sh
및 #!/bin/bash
는 항상 제가 작업 한 몇 안되는 시스템에서 올바른 환경을 찾는 결과를 가져 왔습니다. . 아직 예외가 발생하지 않았습니다. 또한 다양한 청중으로 인해 이식성을 염두에두고 작성된 셸 스크립팅 관련 텍스트에서도 일상적으로 사용되고 있음을 발견했습니다.
#!/usr/bin/env
.일부 시스템에는 #!/bin/env
로 설치되어 있으며 과거에 내 Python 스크립트가 손상되었습니다. 그래서 두 번째 글 머리 기호로 넘어가겠습니다.
위의 진술에 대한 몇 가지 지원이 있습니다.
CentOS 릴리스 5.7에서 다음을 얻습니다.
$ which env /bin/env
Ubuntu 12.04 Precise Pangolin :
$ which env /usr/bin/env
또한 적어도 하나의 이전 시스템에서 관리자를 기억합니다. 어떤 이유로 /opt
에 coreutils
를 설치했습니다 (모범 사례가 아닐 수 있음). env
은 coreutils
의 일부이며 사용자는 결국 /opt/coreutils/bin/env
에서이를 얻었습니다. 물론 모든 시스템을 사용하지 않았기 때문에 대답은 내 제한된 경험을 기반으로합니다.
댓글