我可以在 Bash 的命令行上设置环境变量吗?



我正在尝试为 Bash 设置一个环境变量。 但是,我需要在任何shell 的启动脚本(包括/etc/profile)之前设置它,因为/etc/profile根据此变量的值而有不同的行为。

具体来说,我想创建一个像git-bash一样工作的 MinTTy 快捷方式,但我需要在 shell 启动之前或至少在它开始处理任何启动脚本之前设置MSYSTEM环境变量。

在启动外壳之前让 MinTTy 设置环境变量的解决方案也将被接受。

编辑:我真正正在寻找的是 BASH 的命令行选项,它将设置一个环境变量,有点类似于大多数 C(和其他)编译器的-D选项。 这将是一个"一般情况"解决方案。 或者,与MinTTy类似的选项(命令行或配置)也可以完成这项工作。

对于我的特定需求,我有一个潜在的解决方法:运行一个 BASH 脚本 - 没有启动脚本 - 设置我所需的变量并exec另一个 shell 作为登录 shell。

定义快捷方式文件的目标,如下所示:

C:cygwin64binmintty.exe /bin/bash -l -c "MSYSTEM=MINGW64 exec -l bash"

此命令:

  • 直接调用bash作为登录外壳 (-l)
  • 向它传递一个命令(-c),该命令定义了感兴趣的环境变量(MSYSTEM=MINGW64),然后调用bash(exec -l bash)的新副本,该副本继承了现有环境以及新定义,但由于-l(
    并在$0(-bash)中报告的可执行文件名称前面附加-), 就像您仅以-开头 Mintty 一样,这是常规Cygwin64 Terminal快捷方式所做的)。

另一种方法是先在Windows中设置环境变量。

  • [不是OP的选项]如果环境变量应始终具有相同的值,请持久设置它,如下所示:运行sysdm.cpl,转到Advanced选项卡,单击Environment Variables...并根据需要定义变量MSYSTEM

  • 要定义变量ad-hoc,请按如下方式创建一个批处理文件,并使快捷方式成为该批处理文件的目标:

    @echo off
    # Define the env. variable with the desired value.
    set "MSYSTEM=MINGW64"
    # Invoke Mintty with a login shell, which will now see the env. variable.
    # Adjust the path to mintty.exe as needed.
    c:cygwin64binmintty.exe -
    

注意:在打开 Mintty 之前,从快捷方式打开批处理文件会短暂打开一个常规控制台窗口,这可能是不需要的。

一个简单的帮助程序 WSH 脚本,如我的这个答案所示,可以防止这种情况。

您应该能够执行与命令提示符相同的操作。因此,您可以执行以下操作:

set VAR=VarContents

虽然我已经接受了上面的答案,但我发现这个链接专门解决了我问题的第二部分(Mintty 特定)或在运行命令之前设置环境变量的替代方法。

Windows 快捷方式的内容可以是:

C:cygwin64binmintty.exe -t "Title" /bin/env "MSYSTEM=MINGW64" /bin/bash -l

(由 Mintty 提示建议:设置环境变量。

相关内容

  • 没有找到相关文章