GNU/Linux >> Znalost Linux >  >> Linux

Jaký je rozdíl mezi env a set (na Mac OS X nebo Linux)?

Krátce:set můžete vidět místní proměnné shellu, env nelze.

Shelly mohou mít proměnné 2 typů:locals, které jsou dostupné pouze z aktuálního shellu, a (exportované) proměnné prostředí, které jsou předány každému spuštěnému programu.

Od set je vestavěný příkaz shell, vidí také místní proměnné shellu (včetně funkcí shellu). env na druhé straně je nezávislým spustitelným souborem; vidí pouze proměnné, které mu shell předá, nebo proměnné prostředí.

Když napíšete řádek jako a=1 pak se vytvoří lokální proměnná (pokud již v prostředí neexistovala). Proměnné prostředí se vytvářejí pomocí export a=1


Pokud chcete omezit výstup set příkaz pouze pro proměnné, můžete jej spustit v režimu POSIX:

type -a env set
help set
(set -o posix; set) | nl

Pokud potřebujete jemnější kontrolu nad výpisem konkrétních proměnných, můžete použít vestavěné funkce Bash, jako je declare nebo compgen , nebo nějaké další Bashovy triky.

man bash | less -p '-A action$'  # info on complete & compgen

# listing names of variables
compgen -A variable | nl       # list names of all shell variables
echo ${!P*}                    # list names of all variables beginning with P

compgen -A export | nl         # list names of exported shell variables
export | nl                    # same, plus always OLDPWD
declare -px | nl               # same

declare -pr                    # list readonly variables

# listing names of functions           
compgen -A function | nl
declare -F | nl
declare -Fx | nl

# show code of specified function
myfunc() { echo 'Hello, world!'; return 0; }
declare -f myfunc  

set je vestavěný shell, zatímco env je program (/usr/bin/env)

set dělá několik věcí, ale sám o sobě uvádí proměnné prostředí. Může také nastavit/přepnout přepínače, jako je set +x nebo set -v atd.

env sám o sobě uvádí exportované proměnné prostředí, ale může spustit program v upraveném prostředí

Viz man 1 env pro více informací.


Linux
  1. Jaký je rozdíl mezi vyrovnávací pamětí a mezipamětí v Linuxu?

  2. Jaký je rozdíl mezi strtok_r a strtok_s v C?

  3. Jaký je rozdíl mezi ovladačem platformy Linux a normálním ovladačem zařízení?

  1. Jaký je rozdíl mezi fsck a e2fsck?

  2. Jaký je rozdíl mezi „vyhledat“ a „najít“ v Linuxu?

  3. Jaký je rozdíl mezi adduser a useradd?

  1. Jaký je rozdíl mezi InnoDB a MyISAM?

  2. Jaký je rozdíl mezi voláním knihovny a voláním systému v Linuxu?

  3. Jaký je rozdíl mezi `su -` a `su --login`?