我正在尝试为 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 提示建议:设置环境变量。