我正在尝试为Bash设置环境变量。但是,我需要在任何shell的启动脚本(包括/etc/profile
)之前设置它,因为/etc/profile
基于此变量的值的行为不同。
具体来说,我想创建一个类似于MinTTy的快捷方式,其工作方式类似于git-bash
,但是我需要MSYSTEM
在外壳启动之前或至少在其开始处理任何启动脚本之前设置环境变量。
具有MinTTy在启动外壳之前设置环境变量的解决方案也将被接受。
编辑:我真正想要的是BASH的一个命令行选项,它将设置一个环境变量,有点类似于-D
大多数C(和其他)编译器的选项。这将是一个“一般情况”解决方案。或者,也可以使用与MinTTy类似的选项(命令行或配置)。
对于我的特定需求,我有一个可能的解决方法:运行BASH脚本-不包含启动脚本-设置我的必需变量并将exec
另一个shell作为登录shell。
定义快捷方式文件的目标,如下所示:
C:\cygwin64\bin\mintty.exe /bin/bash -l -c "MSYSTEM=MINGW64 exec -l bash"
该命令:
bash
直接作为登录外壳程序(-l
)调用-c
定义感兴趣的环境变量() MSYSTEM=MINGW64
),然后调用的新副本bash
(exec -l bash
再次),其继承了现有的环境,再加上新的定义,但源的配置文件(一个或多个),由于-l
-
到$0
(-bash
)中报告的可执行文件名称,如果您使用just来启动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脚本可以防止这种情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句