GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist der Unterschied zwischen env und set (unter Mac OS X oder Linux)?

Lange Rede kurzer Sinn:set kann Shell-lokale Variablen sehen, env nicht.

Shells können zwei Arten von Variablen haben:lokale, auf die nur von der aktuellen Shell aus zugegriffen werden kann, und (exportierte) Umgebungsvariablen, die an jedes ausgeführte Programm weitergegeben werden.

Seit set ist eingebaut Shell-Befehl, sieht er auch Shell-lokale Variablen (einschließlich Shell-Funktionen). env andererseits ist es eine unabhängige ausführbare Datei; es sieht nur die Variablen, die ihm die Shell übergibt, oder Umgebungsvariablen.

Wenn Sie eine Zeile wie a=1 eingeben dann wird eine lokale Variable erstellt (sofern sie nicht bereits in der Umgebung vorhanden ist). Umgebungsvariablen werden mit export a=1 erstellt


Wenn Sie die Ausgabe von set einschränken möchten Befehl nur auf Variablen, Sie können ihn im POSIX-Modus ausführen:

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

Wenn Sie eine genauere Kontrolle über die Auflistung bestimmter Variablen benötigen, können Sie Bash-Builts wie declare verwenden oder compgen , oder einige andere Bash-Tricks.

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 ist eine eingebaute Shell, während env ist ein Programm (/usr/bin/env)

set macht mehrere Dinge, listet aber selbst die Umgebungsvariablen auf. Es kann auch Schalter setzen/umschalten, wie z. B. set +x oder set -v usw.

env selbst listet die exportierten auf Umgebungsvariablen, kann aber ein Programm in einer modifizierten Umgebung ausführen

Siehe man 1 env für weitere Informationen.


Linux
  1. Was ist der Unterschied zwischen Puffer- und Cache-Speicher in Linux?

  2. Was ist der Unterschied zwischen einem Linux-Plattformtreiber und einem normalen Gerätetreiber?

  3. Was ist der Unterschied zwischen fsck und e2fsck?

  4. Was ist der Unterschied zwischen adduser und useradd?

  5. Was ist der Unterschied zwischen einem Bibliotheksaufruf und einem Systemaufruf in Linux?

Was ist der Unterschied zwischen macOS- und Linux-Kernels

Was ist der Unterschied zwischen Linux und Unix?

Was ist der Unterschied zwischen Rsync und BTRFS unter Linux?

Was ist der Unterschied zwischen einem Linux-Container und einem Image?

Was ist ein Hypervisor? Was ist der Unterschied zwischen Typ 1 und 2?

Was ist der Unterschied zwischen Curl und Wget?