每当我打开终端时,我都会设置这个变量:
$ 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 网站,有几种方法可以解决这个问题:
- 使用
env
命令并观察变量的创建顺序,并使用前面和后面的变量来大致了解变量可能来自何处 - 将您尝试使用
set -x
命令调查的文件包装在文件的开头和结尾,以查看每个文件的作用;这些文件可能正在获取其他文件,并且set -x
应该明确说明获取发生的位置 - 考虑通过
find -type f -exec grep 'VARIABLE_NAME' {} \;
或浏览主文件夹中的一些文件grep -rI 'VARIABLE'
。这很耗时,所以可能不是最好的结果,但是嘿 - 如果没有简单的方法,就不应该把困难的方法放在一边。 - 运行
strace -v -s 10000 -e execve,open,read bash
并观察正在读取的内容以及前面的调用是什么。这可能对重定向到稍后读取open()
有用,也许。2&>1 > output_trace.txt
grep
来源 您提到了 .bashrc、.bash_profile、/etc/bash.bashrc 和 /etc/environment。您还需要检查:
/etc/profile
/etc/profile.d/*
~/.profile
(仅当您没有 时~/.bash_profile
)~/.bash_login
根据建筑维基,一些程序(例如)
wget
使用此变量。检查您是否可能有.wgetrc
或/etc/wgetrc
文件。这可能在那里设置,尽管它被放到哪里bash
是另一个谜
答案3
gnome-terminal
它本身(即,这种行为被硬编码到二进制文件中)会根据 GNOME 范围的 gsetting 值设置其中一些变量。