【问题标题】:Environment variable change in shell but won't exportshell中的环境变量更改但不会导出
【发布时间】:2020-01-06 13:42:23
【问题描述】:

我在 shell 中设置永久环境变量时遇到问题。例如

HISTSIZE=0
export HISTSIZE
echo $HISTSIZE

变量将在 shell 中改变。但是,如果我打开另一个选项卡或关闭并重新打开 shell,变量会恢复到其原始值 1000。

我还尝试使用用 ~/.bash_profile 编写的脚本来获取变量。但它只在该特定外壳中留下相同的变量问题。如何创建永久更改?

【问题讨论】:

  • 在 bashrc 中这样做应该可以工作,因为它会为每个新的 bash 会话加载。您也可以尝试在 ~/.profile 文件中进行设置。
  • @Dre:: 从您的问题来看,您使用的是bash,但从您的标签中,您要求提供一般的POSIX shell 解决方案。我是否可以建议,为了更清楚您在寻找什么,您将问题中的 shell 标记替换为 bash

标签: linux shell environment-variables


【解决方案1】:

如果你打开一个新标签,新shell的父进程不是你当前的shell,而是你的终端模拟器,所以导出HISTSIZE不会影响新shell的环境。

由于HISTSIZE 只供shell 本身使用,所以根本不需要导出它。在.bashrc 中设置它的值,这样任何新的交互式shell 都会初始化该值。

HISTSIZE=0

如果您的终端仿真器配置为启动登录 shell(在 macOS 上很常见,我认为在 Linux 中则更少),.bashrc 将不会被使用。在这种情况下,我建议在.bash_profile 的最后添加. .bashrc,这样交互式登录shell 的初始化方式与交互式非登录shell 相同。

【讨论】:

    【解决方案2】:

    某些终端模拟器不会将新标签页作为登录 shell 运行。例如。在 Gnome 终端中你应该:

    1. 列表项
    2. 转到编辑 -> 配置文件首选项。
    3. 选择标题和命令选项卡。注意 Run command as login shell 复选框是如何被取消选中的!检查一下。

    此外,在 shell 会话中设置变量不会使其永久用于以后的会话。例如。导出变量使其可用于从实际会话中创建的任何进一步进程。

    要使其具有一定的永久性,您必须将其添加到例如.bashrc

    请注意

    通常建议使用 Shell 配置文件,例如 ~/.bashrc、~/.bash_profile 和 ~/.bash_login 来设置环境变量。虽然这可能适用于从 shell 启动的程序的 Bash shell,但这些文件中设置的变量默认情况下不适用于从桌面会话中的图形环境启动的程序。

    引自Ubuntu help

    所以要决定在哪里添加它,请阅读the fine manual

    【讨论】:

      【解决方案3】:

      查看 bash 手册页:.bash_profile 仅用于交互式登录 shell。如果是交互式非登录 shell,则改为处理 .bashrc

      我建议将那些应该在每个交互式 shell 中执行的设置放入一个单独的文件中(例如:~/.bash_interactive)并从.bash_profile.bashrc 获取此文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-09
        • 1970-01-01
        • 2015-01-03
        • 2021-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多