どちらが良いですか?
#!/usr/bin/env sh
#!/bin/sh
- 空/タイトルなし
私は最初のものが最高だと思いましたが、Androidなどの一部のLinuxベースのシステムではパス名が欠落しているので、「移植可能な」シェルスクリプトを持つ唯一の方法はヘッダーを含まないと思います。
ベストアンサー1
移植性の観点から、#!/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
も存在しません。/bin/sh
/system/bin/sh
欠落しているシェルスクリプト#!
(shebang)は、一部のシステムでそれを呼び出したシェルで実行しようとしたり、/bin/bash
他のシステム(たとえば)で別のデフォルトインタプリタを使用したりする可能性があります。そして同時にこれAndroidでは動作できますが、他のオペレーティングシステムでは動作が保証されていないため、ユーザーはそうでない場合を選択できますbash
。 (私はデフォルトのシェルであるFreeBSDでtcshを使用し、Shabanを持たないスクリプトは呼び出しシェルで解釈されます。)
私が座った場所から見ると、このような感じです。不可能Androidはモノを扱うため、AndroidとAndroid以外のシステム(LinuxまたはUnix)の間に移植可能なシェルスクリプトを作成します。