4

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

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

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

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

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

4

3 回答 3

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
    (and prepends-$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:\cygwin64\bin\mintty.exe -
    

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

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

于 2017-04-21T18:50:54.767 回答
2

您应该能够像在命令提示符下那样做。因此,您可以这样做:

set VAR=VarContents
于 2017-04-21T18:56:33.020 回答
1

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

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

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

(由Mintty Tips 建议设置环境变量。)

于 2017-04-26T21:10:06.060 回答