我可以在Bash的命令行上设置一个环境变量吗?
我想为Bash设置一个环境变量。但是,我需要在之前设置之前的任何shell的启动脚本(包括/etc/profile
),因为/etc/profile
根据此变量的值的不同而行为不同。我可以在Bash的命令行上设置一个环境变量吗?
具体而言,我想创建一个MinTTy的快捷方式,类似于git-bash
,但我需要在shell启动之前或至少在开始处理任何启动脚本之前设置MSYSTEM
环境变量。
MinTTy在启动shell之前设置环境变量的解决方案也将被接受。
编辑: 我所真正需要的是不大不小的命令行选项来BASH将设置环境变量,有些类似-D
选项最C(及其他)编译器。这将是一个“一般情况”解决方案。或者,MinTTy的类似选项(命令行或配置)也可以完成这项工作。
对于我的具体需求,我有一个潜在的解决方法的想法:运行一个BASH脚本 - 没有启动脚本 - 设置我需要的变量和另一个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
快捷方式)。
的替代方法是设置环境变量中视窗第一。
[没有为OP选项] 如果环境变量应该始终具有相同的值,将其坚持如下:运行
sysdm.cpl
,转到Advanced
选项卡,点击Environment Variables...
和定义根据需要变量MSYSTEM
。-
定义变量特设,如下创建一批文件,并进行快捷方式目标是批处理文件:
@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脚本,如我在this answer中演示的那样,可以防止这种情况发生。
@Menachem:我的荣幸;好点重新''';我已经更新了答案,但为了与默认行为保持一致,我使用了'exec -l bash',以便'$ 0'报告'-bash',而不是' -/bin/bash'。 – mklement0
您应该可以像执行命令提示一样进行操作。因此,你可以这样做:
set VAR=VarContents
我能建议您删除这个答案吗?它在我的答案中重复了内容(甚至在您发布自己的答案时,它的原始形式仍然存在),而且它本身不足以解决OP的问题。 – mklement0
虽然我已经接受了上述的回答,我发现这个链接,专门用于解决我的问题的第二部分(Mintty具体)或运行前设置环境变量的另一种方式命令。
的Windows快捷方式的内容可以是:
C:\cygwin64\bin\mintty.exe -t "Title" /bin/env "MSYSTEM=MINGW64" /bin/bash -l
不知道这是否会为你的情况下工作,但trycreating设置该ENV包装脚本变量,然后执行= >>“source/etc/profile”。加上在启动/登录时执行的任何其他脚本。 – zee
@zee我认为。但是,我必须完全复制整个启动过程:登录/交互式,正确的'profile'和'bashrc'文件等。 – Menachem
我可以尝试启动没有启动文件的shell,但只执行一个shell脚本来设置环境变量,然后'exec'sa登录或交互式shell。 – Menachem