![](/img/trans.png)
[英]How can i set my environment variable in c++ without passing command line argument
[英]Can I set an environment variable on Bash's command line?
我正在尝试为Bash设置一个环境变量。 但是,我需要在任何shell的启动脚本(包括/etc/profile
)之前设置它,因为/etc/profile
根据此变量的值采取不同的行为。
具体来说,我想创建一个像git-bash
一样的MinTTy快捷方式,但是我需要在shell启动之前设置MSYSTEM
环境变量,或者至少在它开始处理任何启动脚本之前。
MinTTy在启动shell之前设置环境变量的解决方案也将被接受。
编辑:我真正想要的是BASH的一个命令行选项,它将设置一个环境变量,有点类似于大多数C(和其他)编译器的-D
选项。 这将是一个“一般情况”的解决方案。 或者,MinTTy的类似选项(命令行或配置)也可以完成这项工作。
根据我的具体需要,我有一个潜在的解决方法:运行一个BASH脚本 - 没有启动脚本 - 设置我所需的变量,并exec
另一个shell作为登录shell。
定义快捷方式文件的目标,如下所示:
C:\cygwin64\bin\mintty.exe /bin/bash -l -c "MSYSTEM=MINGW64 exec -l bash"
这个命令:
bash
作为登录shell( -l
) -c
),它定义了感兴趣的环境变量( MSYSTEM=MINGW64
),然后调用bash
( exec -l bash
)的新副本,它继承了现有的环境,加上新的定义,但是获取了配置文件的来源。 (s)再次,由于-l
-
以$0
( -bash
)中报告的可执行文件名称,如果你只使用-
启动Mintty会发生这种情况,这就是常规的Cygwin64 Terminal
快捷方式所做的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脚本,如我的这个答案所示 ,可以防止这种情况。
您应该能够像在命令提示符中那样执行相同操作。 因此,您可以这样做:
set VAR=VarContents
虽然我已经接受了上面的答案,但我发现这个链接专门解决了我的问题的第二部分(特定于Mintty)或者在运行命令之前设置环境变量的另一种方法。
Windows快捷方式的内容可以是:
C:\cygwin64\bin\mintty.exe -t "Title" /bin/env "MSYSTEM=MINGW64" /bin/bash -l
( Mintty Tips建议 : 设置环境变量 。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.