GNU/Linux >> Znalost Linux >  >> Linux

Funkce v proměnných Shell?

Čtu tento příspěvek o používání funkcí v proměnných bash shellu. Všiml jsem si, že k použití funkcí shellu je třeba je exportovat a spustit v podřízeném prostředí takto:

$ export foo='() { echo "Inside function"; }'
$ bash -c 'foo'
Inside function

Chci se zeptat, zda je možné, aby funkce byly definovány v proměnných bash shellu tak, aby mohly být spouštěny v aktuálním shellu bez použití exportu a spuštění nového shellu?

Přijatá odpověď:

Ne, nemůžete.

Pokud chcete použít funkci v aktuálním shellu, stačí ji definovat a použít ji později:

$ foo() { echo "Inside function"; }
$ foo
Inside function

Před dnem Shellshock můžete uložit funkci do proměnné, exportovat proměnnou a použít funkci v sub-shell, protože bash podporuje funkci exportu, bash vloží definici funkce do proměnné prostředí jako:

foo=() {
  echo "Inside function"
}

pak interpretujte funkci nahrazením = s prostorem. Není záměrem vkládat funkci do proměnné a odkazovat na to, že proměnná funkci vykoná.

Nyní, poté, co Stéphane Chazelas našel chybu, byla tato funkce odstraněna, žádná definice funkce již není uložena v prosté proměnné prostředí. Nyní budou exportované funkce zakódovány přidáním prefixu BASH_FUNC_ a přípona %% aby nedošlo ke střetu s proměnnými prostředí. bash interpret nyní může určit, zda jsou nebo nejsou funkcí shellu bez ohledu na obsah proměnných. Musíte také definovat funkci a explicitně ji exportovat, abyste ji mohli použít v sub-shell:

$ foo() { echo "Inside function"; }
$ export -f foo
$ bash -c foo
Inside function

Každopádně, pokud váš příklad fungoval s vaším aktuálním bash , pak používáte zranitelnou verzi.


Linux
  1. Kruhové odkazy na názvy ve funkci Bash Shell, ale ne v Ksh?

  2. Shell skript s funkcí a parametrem jako proměnnými?

  3. Sdílení proměnných ve více skriptech Shell?

  1. Nastavení proměnných prostředí prostředí | BASH Shell

  2. Jak používat funkce shellu příkazového řádku v Linuxu

  3. Pochopení proměnných v Bash Shell pod Linuxem

  1. Importujte funkce a proměnné do Bash pomocí příkazu source

  2. Přizpůsobení prostředí Bash

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