Komentáře
-  Je to opravdu o tom, jak přenosný chcete být . Pouze Unixes? Všechny boxy založené na Linuxu? Všechny systémy, dokonce i staré Win 3.0 a VMS (srandu)? 
/bin/shje obvykle dobré minimum, mějte však na paměti, žeshneníbash.. . očekávejte na většině systémů GNU / Linux . - Ačkoli Android používá linuxové jádro a výchozí prostředí je odvozeno z bash přes ash, uživatelská země není velmi podobné unixu a chybí mnoho standardních nástrojů.
 
Odpověď
 Z důvodu přenositelnosti můžete bezpečně předpokládat, že #!/bin/sh najde na většině standardních unixových nebo linuxových systémech prostředí většinou vyhovující standardu POSIX, ale o tom to opravdu je. 
 Ve FreeBSD, OpenBSD a NetBSD ( spolu s DragonFly, PC-BSD a některými dalšími deriváty) je bash umístěn na /usr/local/bin/bash (pokud je nainstalován), takže /usr/bin/env Tento přístup poskytuje přenositelnost mezi Linuxem a BSD. 
 Android není standardní systém Unix nebo Linux. Na mém telefonu Android bez root není žádný z /usr/bin/env, /bin/bash o r dokonce /bin/sh existují a systémový shell je /system/bin/sh. 
 V shellovém skriptu chybí #! (shebang) se pokusí spustit v prostředí, které jej v některých systémech volalo, nebo může použít jiného výchozího tlumočníka (například /bin/bash) , na jiných systémech. Ačkoliv  toto  může fungovat v systému Android, není zaručeno, že bude fungovat v jiných operačních systémech, kde se uživatelé mohou rozhodnout použít interaktivní prostředí, které není bash. (Používám tcsh ve FreeBSD, kde je to výchozí shell, a skript bez Shebangu je interpretován volajícím shellem.) 
Takže z místa, kde sedím, to vypadá, že je není možné vytvořit shell skript, který je přenosný mezi systémy Android a jinými systémy než Android (Linux nebo Unix), protože Android dělá věci jinak.
Komentáře
-  Podle mých zkušeností má 
/bin/shukazovat na něco podobnějšího nežbshnebodashnežbash, který je relativně nafouklý, a proto je preferován pro interaktivní použití. -  Zde je několik chyb. Stále jich je mnoho (většinou komerčních) Unices around here (most of them Solaris 10 and before) where 
/bin/shis the Bourne shel l, nikoli POSIX shell, POSIX neurčuje ' cestush. Většina mušlí (aexecp/env/find -exec...) bude interpretovat she-bang- méně skriptu se systémem ' ssh, málokdo jej interpretuje sám se sebou a když to udělá, udělá to v režimu kompatibility POSIX. To je ' standardní / POSIX způsob spouštění skriptu, ale předpokládá se, že volající je v prostředí POSIX . -  Ohledně  * BSD  
bashje volitelné. Znamená to, že existuje velká šance, že v systémech neexistuje ani/usr/local/bin/bash(nemluvě o proprietárních systémech jako Solaris, AIX nebo HP-Ux). - @ StephaneChazelas – re POSIX, samozřejmě souhlasím, a proto ' proto používaná slova byla " většinou kompatibilní s POSIX ". Ale tato otázka byla spíše o přenositelnosti než o tom, kde najít POSIX, a člověk se nemůže ' spoléhat na to, že shell bude vždy nalezen na jednom místě. Pokud jde o výchozího tlumočníka, skript bez Shebangu spuštěný v tcsh bude interpretován tcsh na FreeBSD. Je zřejmé, že i tam existuje ' nekonzistence, takže jsem ' odpovídajícím způsobem aktualizoval odpověď.
 - @Ouki – ano, samozřejmě, ' si nemyslím, že by to bylo relevantní k otázce. Ale ' jsem toto vysvětlení přidal k odpovědi kvůli jasnosti.
 
Odpověď
 Podle mých zkušeností #!/bin/sh a #!/bin/bash vždy skončily nalezením správného prostředí na několika systémech, na kterých jsem pracoval . Ještě jsem nenarazil na výjimku. Také mi připadá, že se běžně používá v textech souvisejících se skriptováním, které jsou psány s ohledem na přenositelnost z důvodu různorodého publika. 
 Nemohu říci totéž s #!/usr/bin/env.Některé systémy ji mají nainstalovanou jako #!/bin/env a v minulosti porušily mé pythonovské skripty. Takže půjdu s druhou odrážkou. 
Zde je podpora pro mé výše uvedené prohlášení:
Ve verzi CentOS 5.7 dostanu následující:
$ which env /bin/env 
V systému Ubuntu 12.04 Precise Pangolin:
$ which env /usr/bin/env 
 Navíc si alespoň v jednom starším systému pamatuji administrátory nainstalován coreutils na /opt z nějakého důvodu (nemusí to být nejlepší postup). Protože env je součástí coreutils, uživatelé to nakonec dostali na /opt/coreutils/bin/env. Je pravda, že jsem tam nevyužil všechny systémy, takže odpověď je založen na mých omezených zkušenostech. 
/bin/bashrozhodně není FreeBSD (bude be/usr/local/bin/bashprotože bash není součástí výchozích skořápek)./usr/bin/env(SCO, což je barel y existující, NextStep, který je téměř vyhynulý – plus samozřejmě nejběžnější systémy jiné než unix, jako je Android nebo Windows). Na druhou stranu/bin/bashdo značné míry existuje pouze na Linuxu bez vestavění./bin/shje bezpečná sázka na jakýkoli unix, ale několik starších systémů tam má shell non-POSIX Bourne.which envisn ' t relevantní: existuje poměrně málo systémů, kde/usr/binje symbolický odkaz na/binnebo naopak, což činí/usr/bin/enva/bin/envpoužitelné. Důležité je, že je přítomen/usr/bin/env, což je případ všech linuxových distribucí, které jsem kdy ' viděl nebo slyšel (a jeho odstranění) rozbije tolik věcí, že by to nikdo neudělal).