这个环境变量在哪里设置?

这个环境变量在哪里设置?

每当我打开终端时,我都会设置这个变量:

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

这个变量在哪里设置的?我检查过了.bashrc,,.bash_profile和,/etc/bash.bashrc/etc/environment哪里都没有?!

我还查看了网络部分中的系统设置,代理是空的。

答案1

对于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

来源

答案2

根据本质上你所问问题的重复Unix 和 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.txtgrep来源
  5. 您提到了 .bashrc、.bash_profile、/etc/bash.bashrc 和 /etc/environment。您还需要检查:

    • /etc/profile
    • /etc/profile.d/*
    • ~/.profile(仅当您没有 时~/.bash_profile
    • ~/.bash_login
  6. 根据建筑维基,一些程序(例如)wget使用此变量。检查您是否可能有.wgetrc/etc/wgetrc文件。这可能在那里设置,尽管它被放到哪里bash是另一个谜

答案3

gnome-terminal它本身(即,这种行为被硬编码到二进制文件中)会根据 GNOME 范围的 gsetting 值设置其中一些变量。

相关内容