Bagaimana cara saya melihat daftar semua variabel lingkungan yang didefinisikan saat ini di terminal bash Linux?

31

Di terminal bash Linux, sering ada banyak variabel lingkungan yang telah ditetapkan, seperti $PATHdan $HOME.

Apakah mungkin untuk melihat semua variabel lingkungan yang telah ditetapkan? Bagaimana?

Cory Klein
sumber
1
askubuntu.com/questions/275965/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

32

TL; DR: gunakan(set -o posix ; set)


Menurut manual Bash Anda dapat menggunakan setperintah bawaan untuk menampilkan semua variabel lingkungan yang telah ditetapkan. The setperintah 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 envperintah, namun perintah ini tidak akan memberikan daftar lengkap variabel lingkungan. envhanya akan menampilkan varaibles yang telah ditandai untuk diekspor. Bandingkan output env | sortdan export -pdan 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 envadalah executable terpisah yang bertentangan dengan setyang 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 setperintah 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 setmemberikan output sementara envtidak.

Bintang laut
sumber
24

The envperintah 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.

RedGrittyBrick
sumber
10
Saya lebih suka printenv, karena keduanya envdan setmemiliki fungsi lain daripada hanya menghasilkan lingkungan.
iglvzx
3
envhanya akan mencetak daftar variabel lingkungan yang telah ditandai untuk diekspor. Itu tidak akan mencetak semua variabel.
Starfish
4
@ Starfish benar - itu artinya jawaban yang diterima ini sangat salah. Diedit untuk mengatakan itu hanya daftar variabel yang diekspor.
Volker Siegel