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?
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?
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. The set
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 dengan set -o posix
, tetapi itu akan membiarkan mode POSIX menyala sampai Anda mematikannya set +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.
(set -o posix ; set)
@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 output env | sort
dan export -p
dan Anda akan melihat apa yang saya maksud. Anda dapat menjalankan comm -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 dengan set
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 menggunakan set
perintah seperti yang dinyatakan dalam manual.
Anda dapat dengan mudah menguji perilaku ini untuk diri sendiri menggunakan perintah berikut.
MY_TEST_VARIABLE="This is my test variable."
set | grep MY_TEST_VARIABLE
env | grep MY_TEST_VARIABLE
Anda akan melihat bahwa set
memberikan output sementara env
tidak.
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.
printenv
, karena keduanya env
dan set
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.
compgen -v
mencetak variabel shell (tetapi bukan nilainya).
compgen -e
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
compgen -e
persis apa yang saya inginkan!