GNU/Linux >> Znalost Linux >  >> Linux

Který Bash se provádí?

Myslím, že jsem bash nakonfiguroval jako shell, ale proč se to děje?

Můj shell je bash:

# ls -al `which sh`
  lrwxrwxrwx 1 root root 4 Jul 12 03:25 /bin/sh -> bash 

Chyba při provádění skriptu pomocí sh

# sh ubuntu/util.sh
  ubuntu/util.sh: line 32: `test-build-release': not a valid identifier

Žádná chyba z bash

# bash ubuntu/util.sh

Přijatá odpověď:

Spouští spustitelný soubor bash, který očekáváte, ale váš shell není jen bash; běží bash v POSIX sh Režim kompatibility. Dělá to tak, že se podívá na název příkazu, který byl vyvolán, a pokud je to sh , poté automaticky aktivuje režim POSIX. V tomto dělá velmi strašnou práci a nemělo by se na něj plně spoléhat při testování POSIX sh kompatibilní skripty, ale měl by značně omezit povolenou syntaxi.

–posix

Změňte chování bash tam, kde se výchozí operace liší od standardu POSIX, aby odpovídala standardu (režim posix).
VIZ TAKÉ níže naleznete odkaz na dokument, který podrobně popisuje, jak režim posix ovlivňuje chování bash.

A z http://tiswww.case.edu/php/chet/bash/POSIX:

Spuštění Bash pomocí --posix možnost příkazového řádku nebo provedení set
-o posix
zatímco Bash běží, způsobí, že Bash bude více odpovídat standardu POSIX tím, že změní chování tak, aby odpovídalo
specifikovanému POSIX v oblastech, kde se výchozí Bash liší.

Při vyvolání jako sh , Bash vstoupí do režimu POSIX po načtení spouštěcích
souborů.


Linux
  1. Který Shell Interpreter spouští skript s No Shebang?

  2. Jak číst celý skript Shell před jeho spuštěním?

  3. Jak získat Tty ve kterém Bash běží?

  1. Který terminál je lepší:Bash vs Zsh

  2. Spuštění bash skriptu nebo binárního c na souborovém systému s možností noexec

  3. Extrahujte chybějící cesty z bashového pole cest

  1. Bezpečnostní důsledky zapomenutí citovat proměnnou ve skořápkách Bash/posix?

  2. Jaké jsou speciální parametry/proměnné (bash) Shell?

  3. Který Shell bych měl použít – Tcsh vs Bash?