すべての変数名とその現在の値をリストする方法は?
$HOME
、$PWD
などだけでなく、定義した他のものも含めます。
すべての変数名とその現在の値をリストする方法は?
$HOME
、$PWD
などだけでなく、定義した他のものも含めます。
回答:
bashの場合:(Ubuntuの標準シェル)
ターミナルで次のコマンドを入力して、すべての環境変数を印刷します。
printenv
このコマンドの詳細については、printenv
マニュアルページを参照してください。
「シェル変数」を含むリストを表示するには、次のコマンドを入力できます。
( set -o posix ; set ) | less
これにより、シェル変数だけでなく、環境変数も表示されます。
このトピックに関連する詳細については、次を参照してください。
zshの場合:(高度なシェル)
次のコマンドを使用します。
( setopt posixbuiltin; set; ) | less
ZSHオプションの詳細については、zshoptions
manページを参照してください。
MYNEWVARIABLE=Ubuntu
て実行するprintenv
と、そこには表示されません。それはなぜですか?
export MYNEWVARIABLE=Ubuntu
、期待どおりに動作します。
set
、作成された変数もリストされます。または実行set | grep myvar
printenv
は外部コマンドであるため、エクスポートされた環境変数のみを認識(および出力)します。 set
は内部bashコマンドであるため、すべての「シェル変数」(エクスポートされていない環境変数)とエクスポートされた環境変数を表示します。
unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
が、これは機能しunset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
、これは機能しunset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW
ます。exportを使用すると、「設定している変数は、このシェルの変数だけでなく、プロセスに渡される環境の一部である必要があります」と表示されます。3番目の例では、「変数は、このプロセスに渡される環境の一部である必要がありますが、その後は使用しないでください。」
私はこの質問がかなり古くて答えられていることを知っていますが、少し役に立つ情報を追加できると思います。
上記のすべての方法で、推奨される手順は次のとおりです。
env
、または
printenv
その他を使用して環境変数を表示するこれらのソリューションの問題は、ターミナルを実行しているシェルの環境変数が表示されることです。たとえば、グラフィックインターフェイスから直接実行されるアプリケーションで使用できる環境変数は表示されません。
これは、たとえば、、~/.profile
または.bashrc
、または.zshenv
(シェルに応じて)を使用して環境変数を変更する場合に顕著です。これは、パスへのディレクトリの古典的な追加のように。
グラフィック環境で直接起動されたアプリケーションで使用可能な環境変数を確認するには、次の操作を実行できます(Gnomeシェルでは、他のすべてのDEに同等のメソッドがあると確信しています)。
xterm -e bash --noprofile --norc
(または、お持ちでない場合はxterm
、gnome-terminal -- bash --noprofile --norc
--- @Mike Nakisのコメントに感謝します)。
これで、環境変数を追加しなかったシェルを備えた端末ができました。env
ここを使用して、すべての環境変数をリストできます。
明らかに、新しいシェルにはシステムファイルによって環境変数が追加されますが、その変数は(継承によって)システム内のすべてのプログラムで利用できるはずです。
.pam_environment
ファイルをチェックしてこのトリックをもう一度検索する必要があるのは4回目だからです。だから今、私はそれをより速く見つけるでしょう(そしてその過程で、私は他の誰かを助けることを望みます...)
xterm -e bash --noprofile --norc
Ubuntuがグラフィカルインターフェイスで起動されたときに起動ファイルが読み取られて実行されないため、お勧めしましたか?参照してくださいaskubuntu.com/q/1025845/1471
gnome-terminal -- bash --noprofile --norc
declare
組み込みのすべての変数を見ることができます。
declare -p
環境変数のみに関心がある場合は、使用します
declare -xp
実行help declare
して、他のオプションを確認します。
POSIXLY_CORRECT=1 set
あり、それはまた、特筆すべきでdeclare
あるalias
ために(そのコンテキストで)typeset
別のbashの組み込み、。
ターミナルの環境変数をCTRL+ ALT+ でリストするには、コマンドTを使用できますenv
。
例えば :
[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
等
それが役立つことを願っています。
ここでのほとんどのソリューションは、環境変数のみを印刷するか、envまたは(set -o posix; posix)が解析可能な形式で値を印刷しないという欠点があります(変数A = $ 'a \ r \ nb' ...を印刷してみてください) 。
以下に、POSIXエスケープ形式ですべての変数を1行に1変数ずつ出力する関数を示します。
function dump_vars {
local VARNAME
compgen -v | while read -r VARNAME; do
printf "$VARNAME=%q\n" "${!VARNAME}"
done
}
compgen -vの使用を指摘してくれた@tmgoblinに感謝します。
envはPOSIX 7の方法です:
export asdf=qwer
env | grep asdf
サンプル出力:
asdf=qwer
エクスポートされた変数のみが表示されます。エクスポートされていない変数は、通常「環境変数」とは見なされません。
上のことを好むprintenv
、POSIXされていません。どちらも引数なしで同じことをしているようです:https : //unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenv
env
より良い書式設定でもっと見やすくしたいので、もっと情報を追加しました。
printenvはエクスポートされた変数のみをリストし、 command+ alt+ $ ( "\ e $":complete-variable)はすべての変数をリストします。