web-dev-qa-db-ja.com

この環境変数はどこに設定されていますか?

ターミナルを開くたびに、次の変数が設定されます。

$ echo $http_proxy
http://127.0.0.1:8888/

この変数はどこに設定されていますか? .bashrc.bash_profile/etc/bash.bashrc、および/etc/environmentを確認しましたが、どこにもありません!?

また、ネットワークセクションの[システム設定]を確認しましたが、プロキシは空です。

9
klarki

bashの場合:

PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7> /tmp/mylog

次に使用する

grep "http_proxy=" /tmp/mylog

それを検索します。

より良い結果を得るために、検索を/homeおよび/etcに制限することもできます。

$ grep "http_proxy=" /tmp/mylog | grep -e /home -e /etc
++/home/ravexina/.bashrc> http_proxy=http://test:80

つまり、~/.bashrcで設定されています。

ソース

16
Ravexina

nix&Linuxサイト の基本的に 要求したものの複製 によると、この問題に対処する方法はいくつかあります。

  1. envコマンドを使用して、変数が作成された順序を観察し、前後の変数を使用して、変数がどこから来たかを大まかに把握します。
  2. ファイルの先頭と末尾でset -xコマンドで調査しようとするファイルをラップして、各ファイルの機能を確認します。潜在的にこれらのファイルは他のファイルをソースしているので、set -xはソースが発生する場所を明示的に示す必要があります
  3. find -type f -exec grep 'VARIABLE_NAME' {} \;または単にgrep -rI 'VARIABLE'を使用して、ホームフォルダーにあるファイルのいくつかを調べることを検討してください。これは時間がかかるので、最良の結果ではないかもしれませんが、ちょっと-簡単な方法がない場合は、難しい方法を脇に置いてはいけません。
  4. strace -v -s 10000 -e execve,open,read bashを実行し、何が読み取られ、何が先行するopen()呼び出しであるかを観察します。これは、後で読むための2&>1 > output_trace.txtリダイレクト、おそらくgrepで便利です。 ソース
  5. .bashrc、.bash_profile、/ etc/bash.bashrc、および/ etc/environmentについて言及しました。以下も確認する必要があります。

    • /etc/profile
    • /etc/profile.d/*
    • ~/.profile~/.bash_profileがない場合のみ)
    • ~/.bash_login
  6. Arch Wiki によると、wgetなどの一部のプログラムはこの変数を使用します。 .wgetrcまたは/etc/wgetrcファイルがあるかどうかを確認します。これはそこに設定されているかもしれませんが、bashのソースは別の謎です

6
Sudo grep -r http_proxy /etc

トリックを行う必要があります

2
byteborg

gnome-terminal自体(つまり、この動作はバイナリにハードコーディングされています)は、GNOME全体のgsetting値に基づいてこれらの変数の一部を設定します。

0
egmont