Pertanyaan Bagaimana daftar semua nama variabel dan nilainya saat ini?


Bagaimana daftar semua nama variabel dan nilainya saat ini?

Termasuk tidak hanya $HOME, $PWD dll tetapi yang lain yang telah Anda tetapkan.


295
2018-03-30 00:36


asal


superuser.com/questions/420295/… - Ciro Santilli 新疆改造中心 六四事件 法轮功


Jawaban:


Masukkan perintah berikut di terminal untuk mencetak semua variabel lingkungan:

printenv

Untuk informasi lebih lanjut tentang perintah ini, baca printenv halaman manual.


Untuk menampilkan daftar termasuk "variabel shell" Anda dapat memasukkan perintah berikutnya:

( set -o posix ; set ) | less

Ini akan menunjukkan kepada Anda tidak hanya variabel shell, tetapi variabel lingkungan juga.

Untuk informasi lebih lanjut terkait dengan topik ini baca:


417
2018-03-30 01:21



Jika saya pergi ke terminal dan menulis MYNEWVARIABLE=Ubuntu dan eksekusi printenv itu tidak muncul di sana. Mengapa demikian, dan bagaimana orang lain itu muncul? - Strapakowsky
Mungkin Anda melihat perbedaan antara variabel shell dan variabel lingkungan. Mencoba export MYNEWVARIABLE=Ubuntu dan itu akan berfungsi seperti yang Anda harapkan. - Rmano
jika Anda hanya mengeksekusi set, daftar variabel yang dibuat oleh Anda juga. Atau lakukan set | grep myvar - Sergiy Kolodyazhnyy
printenv adalah perintah eksternal, sehingga hanya mengetahui tentang (dan mencetak) variabel lingkungan yang diekspor. set adalah perintah bash internal, jadi ini menunjukkan semua "variabel shell" (variabel lingkungan tidak terekspor) serta variabel lingkungan yang diekspor. - Dan Pritts
Untuk memperluas balasan @ Rmano ke @Strapakowsky ... Ini tidak akan berfungsi unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW, tapi ini akan terjadi unset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW, dan ini akan unset 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 dilewatkan ke proses INI, tetapi tidak bertahan setelahnya." - Bruno Bronosky


Saya tahu bahwa pertanyaan ini sudah cukup lama dan dijawab, tetapi saya rasa saya dapat menambahkan sedikit informasi yang berguna.

Dalam semua metode yang dijelaskan di atas, prosedur yang disarankan adalah:

  • meluncurkan terminal
  • menunjukkan variabel lingkungan menggunakan env, atau printenv atau terserah

Masalah solusi ini adalah Anda melihat variabel lingkungan dari shell yang sedang berlari ke terminal. Anda tidak melihat variabel lingkungan yang tersedia untuk menjalankan aplikasi, misalnya, langsung oleh antarmuka grafis.

Ini terlihat jika, misalnya, Anda menggunakan Anda ~/.profile, atau .bashrc, atau .zshenv (tergantung pada shell Anda) untuk memodifikasi variabel lingkungan --- seperti penambahan direktori klasik ke path.

Untuk melihat variabel lingkungan yang tersedia untuk aplikasi yang dimulai langsung di lingkungan grafis, Anda dapat melakukan hal berikut (di Gnome Shell, saya yakin ada metode yang setara di semua DE lainnya):

  • tekan Alt-F2
  • jalankan perintah xterm -e bash --noprofile --norc

Anda sekarang memiliki terminal dengan shell yang tidak menambahkan variabel lingkungan. Kamu dapat memakai env di sini untuk mencantumkan semua variabel lingkungan Anda:

Example of the bare shell

Jelas shell baru akan memiliki variabel lingkungan yang ditambahkan oleh file sistem, tetapi variabel itu harus tersedia (oleh warisan) untuk semua program dalam sistem.

Saya memposting ini karena ini keempat kalinya saya harus mencari trik ini lagi, memeriksa saya .pam_environment mengajukan. Jadi sekarang saya akan menemukannya lebih cepat (dan dalam prosesnya, saya berharap membantu orang lain ...)


43
2017-10-12 00:37



Membutuhkan Anda memiliki lingkungan desktop, tidak berguna untuk faksi CLI saja. - K7AAY
Ya --- tetapi kemudian untuk CLI hanya jawaban sebelumnya yang ok. Saya hanya menunjukkan bahwa kadang-kadang Anda perlu memeriksa variabel lingkungan yang tersedia untuk aplikasi yang dimulai oleh lingkungan grafis, yang tidak sama dengan yang Anda lihat ketika Anda memulai terminal di dalamnya. Misalnya, jika Anda mencoba memahami mengapa aplikasi Kile Anda tidak dapat mengkompilasi file LaTeX, sementara di terminal Anda bisa, trik yang saya posting di sini akan banyak membantu. - Rmano
Terima kasih atas jawaban yang sangat berguna! Saya baru saja menautkannya help.ubuntu.com/community/… - Gunnar Hjalmarsson
Terima kasih. Apakah kamu merekomendasikan xterm -e bash --noprofile --norc karena file startup tidak dibaca dan dijalankan ketika Ubuntu dimulai dengan antarmuka grafis? Lihat askubuntu.com/q/1025845/1471 - Tim
@Tim pada dasarnya itu hanya cara untuk memiliki shell tanpa sesuatu yang lebih dari variabel lingkungan yang tersedia untuk lingkungan grafis. Terminal standar akan membaca (atau membaca ulang) .bashrc sebagai contoh... - Rmano


Anda dapat melihat semua variabel dengan declare builtin.

declare -p

Jika Anda hanya tertarik pada variabel lingkungan, gunakan

declare -xp

Menjalankan help declare untuk melihat apa opsi lain.


32
2018-04-04 20:28



ini jauh lebih rapi daripada solusi POSIXLY_CORRECT=1 set dan itu juga layak disebutkan itu declare aku s alias (dalam konteks itu) untuk typeset, bash builtin lainnya. - w17t


Untuk daftar variabel lingkungan di terminal dengan CTRL+ALT+T Kamu dapat memakai env perintah.

sebagai contoh :

[raja@localhost ~]$ env
XDG_VTNR=1
SSH_AGENT_PID=3671
XDG_SESSION_ID=3
HOSTNAME=localhost.localdomain
IMSETTINGS_INTEGRATE_DESKTOP=yes
GPG_AGENT_INFO=/home/raja/.gnupg/S.gpg-agent:3691:1
GLADE_PIXMAP_PATH=:
TERM=xterm-256color
SHELL=/bin/bash
XDG_MENU_PREFIX=xfce-
DESKTOP_STARTUP_ID=
HISTSIZE=1000
XDG_SESSION_COOKIE=0250277dd805498381e96c05d88068b0-1364679772.845276-1676152201
WINDOWID=65011716
GNOME_KEYRING_CONTROL=/home/raja/.cache/keyring-N3QoQ2
IMSETTINGS_MODULE=none
QT_GRAPHICSSYSTEM_CHECKED=1
USER=raja

dll.

harap itu membantu.


11
2018-03-30 16:41



Saya telah memperhatikan bahwa env melewatkan beberapa variabel o_O. khususnya setelah mencari file VAR = VAL. - ThorSummoner
@ThorSummoner Jawabannya di sini mungkin membantu stackoverflow.com/questions/15474650/… - georaldc


Dalam bash menggunakan compgen:

compgen -v | while read line; do echo $line=${!line};done  

3
2018-04-11 20:53



Ini harus menjadi jawaban yang diterima, karena semua yang lain mendaftar lebih dari sekadar nama itu sendiri. Dalam kasus saya beberapa variabel mengandung nilai-nilai multiline yang membuat solusi lain tidak dapat dipertahankan. - Mene


env adalah POSIX 7 cara:

export asdf=qwer
env | grep asdf

Output sampel:

asdf=qwer

Ini hanya menunjukkan variabel yang diekspor: variabel yang tidak diekspor biasanya tidak dianggap sebagai "variabel lingkungan".

Lebih suka itu berakhir printenv, yang bukan POSIX. Keduanya tampaknya melakukan hal yang sama tanpa argumen: https://unix.stackexchange.com/questions/123473/what-is-the-difference-bethween-env-and-printenv


2
2017-11-30 14:31



Sudah disebutkan dua tahun lalu: askubuntu.com/a/276162/158442 - muru
@muru cukup adil. Berharap itu sudah terjadi env lebih terlihat dengan pemformatan yang lebih baik, dan saya telah menambahkan lebih banyak info. - Ciro Santilli 新疆改造中心 六四事件 法轮功
S apa pengeditan adalah untuk. - muru


Jika Anda menginginkan variabel lingkungan tertentu, daripada mencetak semuanya printenv, Anda dapat misalnya mencetaknya dengan melakukan echo "$PWD"


0
2018-01-08 14:13