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

Can I set an environment variable on Bash's command line?

我正在尝试为 Bash 设置环境变量。但是,我需要在 before 任何 shell 的启动脚本(包括 /etc/profile)之前设置它,因为 /etc/profile 的行为基于这个变量的值。

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

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

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

根据我的具体需要,我有一个潜在的解决方法:运行 一个 BASH 脚本 - 没有启动脚本 - 设置我需要的变量和 exec另一个 shell 作为登录名 shell。

按如下方式定义快捷方式文件的目标:

C:\cygwin64\bin\mintty.exe /bin/bash -l -c "MSYSTEM=MINGW64 exec -l bash"

这个命令:

  • 直接调用 bash 作为登录 shell (-l)
  • 向它传递一个定义感兴趣的环境变量 (MSYSTEM=MINGW64) 的命令 (-c),然后调用 bash 的新副本 (exec -l bash),它继承了现有的环境,加上新的定义,但由于 -l
    而再次获取配置文件 (并在 [=20=] (-bash) 中报告的可执行文件名称前加上 -,如果你只用 - 启动 Mintty 就会发生这种情况,这就是常规 Cygwin64 Terminal 快捷方式。

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

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

  • 要定义变量ad-hoc,创建一个batch文件如下,并创建快捷方式目标批处理文件:

    @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:\cygwin64\bin\mintty.exe -
    

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

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

您应该能够像在命令提示符下一样进行操作。因此,你可以这样做:

set VAR=VarContents

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

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

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

(由 Mintty Tips:Setting environment variables 建议。)