GNU/Linux >> Belajar Linux >  >> Linux

Apa perbedaan antara env dan set (di Mac OS X atau Linux)?

Singkat cerita:set dapat melihat variabel shell-local, env tidak bisa.

Shell dapat memiliki 2 jenis variabel:lokal, yang hanya dapat diakses dari shell saat ini, dan variabel lingkungan (diekspor), yang diteruskan ke setiap program yang dijalankan.

Sejak set adalah bawaan perintah shell, ia juga melihat variabel shell-local (termasuk fungsi shell). env di sisi lain adalah executable independen; ia hanya melihat variabel yang diteruskan oleh shell, atau variabel lingkungan.

Saat Anda mengetik baris seperti a=1 kemudian variabel lokal dibuat (kecuali sudah ada di lingkungan). Variabel lingkungan dibuat dengan export a=1


Jika Anda ingin membatasi output dari set perintah ke variabel saja, Anda dapat menjalankannya dalam mode POSIX:

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

Jika Anda memerlukan kontrol yang lebih baik atas daftar variabel tertentu, Anda dapat menggunakan bawaan Bash seperti declare atau compgen , atau beberapa trik Bash lainnya.

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 adalah shell bawaan, sedangkan env adalah sebuah program (/usr/bin/env)

set melakukan beberapa hal, tetapi dengan sendirinya mencantumkan variabel lingkungan. Itu juga dapat menyetel/mengalihkan sakelar, seperti set +x atau set -v dll.

env dengan sendirinya mencantumkan diekspor variabel lingkungan, tetapi dapat menjalankan program di lingkungan yang dimodifikasi

Lihat man 1 env untuk informasi lebih lanjut.


Linux
  1. Apa perbedaan antara wadah Linux dan gambar?

  2. Apa perbedaan antara buffer dan memori cache di Linux?

  3. Apa perbedaan antara strtok_r dan strtok_s di C?

  1. Apa perbedaan antara driver platform Linux dan driver perangkat biasa?

  2. Apa perbedaan antara fsck dan e2fsck?

  3. Apa perbedaan antara adduser dan useradd?

  1. Apa perbedaan antara ls dan l?

  2. Apa perbedaan antara Unix, Linux, BSD dan GNU?

  3. Apa perbedaan antara `su -` dan` su --login`?