Bagaimana cara membuat daftar semua nama variabel dan nilainya saat ini?
Termasuk tidak hanya $HOME
, $PWD
dll tetapi yang lain yang telah Anda tetapkan.
command-line
bash
environment-variables
Strapakowsky
sumber
sumber
Jawaban:
Untuk bash: (shell standar di Ubuntu)
Masukkan perintah berikut di terminal untuk mencetak semua variabel lingkungan:
Untuk informasi lebih lanjut tentang perintah ini, baca
printenv
halaman manual .Untuk menampilkan daftar termasuk "variabel shell" Anda dapat memasukkan perintah berikutnya:
Ini tidak hanya akan menunjukkan kepada Anda variabel shell, tetapi juga variabel lingkungan.
Untuk informasi lebih lanjut terkait dengan topik ini, baca:
Untuk zsh: (shell tingkat lanjut)
Gunakan perintah berikut:
Untuk informasi lebih lanjut tentang opsi ZSH, lihat
zshoptions
halaman manual .sumber
MYNEWVARIABLE=Ubuntu
dan menjalankannyaprintenv
tidak muncul di sana. Mengapa begitu, dan bagaimana orang lain itu muncul?export MYNEWVARIABLE=Ubuntu
dan akan bekerja seperti yang Anda harapkan.set
, itu mencantumkan variabel yang dibuat oleh Anda juga. Atau lakukanset | grep myvar
printenv
adalah perintah eksternal, jadi ia hanya tahu tentang (dan mencetak) variabel lingkungan yang diekspor.set
adalah perintah bash internal, jadi itu menunjukkan semua "variabel shell" (variabel lingkungan yang tidak diekspor) serta variabel lingkungan yang diekspor.unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
, tapi ini akanunset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
, dan ini akanunset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW
. Menggunakan ekspor mengatakan "variabel yang saya setting harus menjadi bagian dari lingkungan yang diteruskan ke proses, bukan hanya variabel dalam shell ini." Contoh ketiga saya mengatakan "variabel harus menjadi bagian dari lingkungan yang diteruskan ke proses INI, tetapi tidak bertahan sesudahnya."Saya tahu bahwa pertanyaan ini sudah cukup lama dan terjawab, tetapi saya pikir saya dapat menambahkan sedikit informasi yang berguna.
Dalam semua metode yang dijelaskan di atas, prosedur yang disarankan adalah:
env
, atauprintenv
atau apa punMasalah dari solusi ini adalah bahwa Anda melihat variabel lingkungan dari shell yang berjalan ke terminal . Anda tidak melihat variabel lingkungan yang tersedia untuk menjalankan aplikasi, misalnya, langsung oleh antarmuka grafis.
Ini terlihat jika, misalnya, Anda menggunakan
~/.profile
, atau.bashrc
, atau.zshenv
(tergantung pada shell Anda) untuk memodifikasi variabel lingkungan --- seperti penambahan klasik direktori ke path.Untuk melihat variabel lingkungan yang tersedia untuk aplikasi yang dimulai langsung di lingkungan grafik, Anda dapat melakukan hal berikut (di Gnome Shell, saya yakin ada metode yang setara di semua DE lainnya):
xterm -e bash --noprofile --norc
(Atau, jika Anda tidak punya
xterm
,gnome-terminal -- bash --noprofile --norc
--- terima kasih kepada @ Mike Nakis untuk komentarnya).Anda sekarang memiliki terminal dengan shell yang tidak menambahkan variabel lingkungan apa pun. Anda dapat menggunakan di
env
sini untuk mendaftar semua variabel lingkungan Anda:Jelas shell baru akan memiliki variabel lingkungan yang ditambahkan oleh file sistem, tetapi variabel itu harus tersedia (berdasarkan warisan) untuk semua program dalam sistem.
Saya memposting ini karena ini keempat kalinya saya harus mencari trik ini lagi, memeriksa
.pam_environment
file saya . Jadi sekarang saya akan menemukannya lebih cepat (dan dalam prosesnya, saya harap membantu orang lain ...)sumber
xterm -e bash --noprofile --norc
karena file startup tidak dibaca dan dieksekusi ketika Ubuntu dimulai dengan antarmuka grafis? Lihat askubuntu.com/q/1025845/1471gnome-terminal -- bash --noprofile --norc
Anda dapat melihat semua variabel dengan
declare
builtin.Jika Anda hanya tertarik pada variabel lingkungan, gunakan
Jalankan
help declare
untuk melihat apa opsi lainnya.sumber
POSIXLY_CORRECT=1 set
dan juga layak disebutkan bahwadeclare
adalahalias
(dalam konteks itu) untuktypeset
, builtin pesta lain.Untuk membuat daftar variabel lingkungan di terminal dengan CTRL+ ALT+ TAnda dapat menggunakan
env
perintah.sebagai contoh :
dll.
berharap itu bisa membantu.
sumber
Dalam bash menggunakan compgen:
sumber
compgen -v | while read line; do declare -p $line; done
Sebagian besar solusi di sini hanya mencetak variabel lingkungan saja, atau memiliki kelemahan yang env atau (set -o posix; posix) tidak mencetak nilai dalam bentuk yang dapat diuraikan (cobalah untuk mencetak variabel A = $ 'a \ r \ nb' ...) .
Berikut adalah fungsi yang akan mencetak semua variabel, satu variabel per baris, dalam bentuk POSIX escaped:
Terima kasih kepada @tmgoblin untuk menunjukkan penggunaan compgen -v.
sumber
env adalah cara POSIX 7 :
Output sampel:
Ini hanya menunjukkan variabel yang diekspor: variabel yang tidak diekspor biasanya tidak dianggap "variabel lingkungan".
Lebih suka yang berakhir
printenv
, yang bukan POSIX. Keduanya tampaknya melakukan hal yang sama tanpa argumen: https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenvsumber
env
lebih terlihat dengan pemformatan yang lebih baik, dan saya telah menambahkan lebih banyak info.Jika Anda menginginkan variabel lingkungan tertentu, daripada mencetak semuanya
printenv
, Anda dapat, misalnya, mencetak dengan melakukanecho "$PWD"
sumber
printenv hanya mencantumkan variabel yang diekspor, command+ alt+ $ ("\ e $": variabel lengkap) akan mencantumkan semua variabel.
sumber