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

时间:2017-04-21 18:29:12

标签: bash shell git-bash mintty git-for-windows

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

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

此命令:

  • 直接调用bash作为登录shell(-l
  • 传递一个命令(-c),用于定义感兴趣的环境变量(MSYSTEM=MINGW64),然后调用bashexec -l bash)的新副本,该副本继承现有环境加上新定义,但由于-l
    而再次获取配置文件 (并将-添加到$0-bash)中报告的可执行文件名称,如果您使用-启动Mintty就会发生这种情况,这就是常规{{1}快捷方式)。

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

  • [不是OP的选项] 如果环境变量始终具有相同的值,请按如下所示持久设置:运行{{1} },转到Cygwin64 Terminal标签,点击sysdm.cpl并根据需要定义变量Advanced

  • 要定义变量 ad-hoc ,请按如下所示创建批处理文件,并将快捷方式目标设为批处理文件:

    Environment Variables...

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

我的this answer中演示了一个简单的帮助WSH脚本,可以防止这种情况发生。

答案 1 :(得分:1)

您应该能够像在命令提示符中那样执行相同的操作。因此,您可以这样做:

set VAR=VarContents

答案 2 :(得分:1)

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

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

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

(建议Mintty TipsSetting environment variables。)