Di terminal bash Linux, sering ada banyak variabel lingkungan yang telah ditetapkan, seperti $PATH
dan $HOME
.
Apakah mungkin untuk melihat semua variabel lingkungan yang telah ditetapkan? Bagaimana?
environment-variables
Cory Klein
sumber
sumber
Jawaban:
TL; DR: gunakan
(set -o posix ; set)
Menurut manual Bash Anda dapat menggunakan
set
perintah bawaan untuk menampilkan semua variabel lingkungan yang telah ditetapkan. Theset
perintah juga akan menampilkan definisi dari fungsi apapun. Jika Anda hanya ingin melihat variabel, dan bukan fungsi, maka Anda dapat mengaktifkan mode POSIX sebelum menjalankan perintah yang ditetapkan. Cara termudah untuk melakukannya adalah denganset -o posix
, tetapi itu akan membiarkan mode POSIX menyala sampai Anda mematikannyaset +o posix
.Oleh karena itu, perintah berikut akan menampilkan semua variabel lingkungan yang ditentukan dengan menggunakan subkulit tanpa memengaruhi kepatuhan POSIX di shell Anda saat ini.
@RedGrittyBrick dan @iglvzx disarankan menggunakan
env
perintah, namun perintah ini tidak akan memberikan daftar lengkap variabel lingkungan.env
hanya akan menampilkan varaibles yang telah ditandai untuk diekspor. Bandingkan outputenv | sort
danexport -p
dan Anda akan melihat apa yang saya maksud. Anda dapat menjalankancomm -23 <(set -o posix; set) <(env|sort)
jika Anda ingin melihat variabel lingkungan mana yang tidak diekspor.Alasan untuk perbedaan ini adalah bahwa itu
env
adalah executable terpisah yang bertentangan denganset
yang merupakan perintah built-in shell. Menurut manual Bash, ketika sebuah perintah dieksekusi yang bukan perintah atau fungsi built-in shell, ia hanya akan menerima variabel lingkungan yang telah ditandai untuk diekspor di Bash . Ada banyak variabel yang tidak diekspor. Oleh karena itu, jika Anda ingin melihat semua variabel yang didefinisikan oleh shell Anda, Anda harus menggunakanset
perintah seperti yang dinyatakan dalam manual.Anda dapat dengan mudah menguji perilaku ini untuk diri sendiri menggunakan perintah berikut.
Anda akan melihat bahwa
set
memberikan output sementaraenv
tidak.sumber
The
env
perintah tanpa argumen akan mencetak daftar "diekspor" variabel lingkungan dan nilai-nilai mereka. Variabel-variabel ini dibuat terlihat oleh subproses - banyak variabel lingkungan lainnya tidak ditunjukkan dengan ini, dan digunakan hanya di dalam shell yang sedang berjalan, misalnya untuk konfigurasi.sumber
printenv
, karena keduanyaenv
danset
memiliki fungsi lain daripada hanya menghasilkan lingkungan.env
hanya akan mencetak daftar variabel lingkungan yang telah ditandai untuk diekspor. Itu tidak akan mencetak semua variabel.mencetak variabel shell (tetapi bukan nilainya).
mencetak variabel yang diekspor yaitu yang diwariskan oleh proses shell ini dimulai (tetapi bukan nilainya).
Perbedaan antara variabel shell dan yang diekspor: https://unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b?rq=1
sumber
compgen -e
persis apa yang saya inginkan!