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

kla*_*rki 10 command-line bash gnome-terminal environment-variables

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

$ echo $http_proxy
http://127.0.0.1:8888/
Run Code Online (Sandbox Code Playgroud)

这个变量在哪里设置?我检查.bashrc.bash_profile/etc/bash.bashrc以及/etc/environment和它的无处?

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

Rav*_*ina 17

对于bash运行:

PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7> /tmp/mylog
Run Code Online (Sandbox Code Playgroud)

然后使用

grep "http_proxy=" /tmp/mylog
Run Code Online (Sandbox Code Playgroud)

去寻找它。

您也可以将搜索范围限制/home,并/etc为更好的结果:

$ grep "http_proxy=" /tmp/mylog | grep -e /home -e /etc
++/home/ravexina/.bashrc> http_proxy=http://test:80
Run Code Online (Sandbox Code Playgroud)

这意味着它已设置在我的~/.bashrc.

来源


Ser*_*nyy 6

根据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.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是另一个谜