GNU/Linux >> Znalost Linux >  >> Linux

Je správné používat /bin/sh v Hashbang, když Bourne Shell není k dispozici v distribuci?

Shell skripty obecně obsahují na prvním řádku souboru skriptu následující komentář:#!/bin/sh . Podle výzkumů, které jsem provedl, se tomu říká „hash bang“ a je to konvenční komentář. Tento komentář informuje Unix, že tento soubor spouští Bourne Shell v adresáři /bin .

Moje otázka začíná v tomto bodě. Doposud jsem neviděl tento komentář jako #!/bin/bash . Vždy je to #!/bin/sh . Distribuce Ubuntu však nemají program Bourne Shell. Mají Bourne Again Shell (bash).

Je v tomto bodě správné umístit komentář #!/bin/sh ve skriptech shellu napsaných v distribucích Ubuntu?

Přijatá odpověď:

#!/bin/sh by měl fungovat na všech unixových a unixových distribucích. Obecně je považován za nejpřenosnější hashbang, pokud je váš skript udržován v souladu s POSIX. /bin/sh shell má být shell, který implementuje standard shellu POSIX, bez ohledu na to, jaký je skutečný shell, který se maskuje jako /bin/sh shell.

#!/bin/sh je nyní normálně pouze odkazem, protože Bourne shell již není udržován. Na mnoha unixových systémech /bin/sh bude odkaz na /bin/ksh nebo /bin/ash , na mnoha systémech Linux založených na RHEL to bude odkaz na /bin/bash , nicméně na Ubuntu a mnoha systémech založených na Debianu je to odkaz na /bin/dash . Všechny shelly, když jsou vyvolány jako sh , přejde do režimu kompatibility POSIX.

Hashbang je však důležitým zástupným symbolem, protože umožňuje mnohem větší přenositelnost než jiné metody, pokud je váš skript striktně kompatibilní s POSIX (opakováno pro zdůraznění důležitosti).

Poznámka:Když bash je vyvolán v režimu POSIX, stále bude umožňovat některé věci, které nejsou POSIX, jako je [[ , pole a další. Tyto věci mohou selhat na jiném než bash systém.


Linux
  1. /usr/bin Vs /usr/local/bin Na Linuxu?

  2. Není důvod mít Shebang ukazující na /bin/sh spíše než /bin/bash?

  3. Linux – sloučení /usr/bin A /usr/sbin do /bin (gnu/linux)?

  1. Co dělá řádek '!/bin/sh -e'?

  2. Nainstalujte binární soubory do /bin, /sbin, /usr/bin a /usr/sbin, interakce s --prefix a DESTDIR

  3. cmake --version ukazuje na /usr/bin/cmake, zatímco který cmake ukazuje na /usr/local/bin

  1. Jaké je použití příkazu „/usr/bin/[“ [hraná závorka] v Linuxu?

  2. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  3. Proč je lepší používat jako Shebang „#!/usr/bin/env Name“ místo „#!/path/to/name“?