2017-04-21 174 views
3

我想为Bash设置一个环境变量。但是,我需要在之前设置之前的任何shell的启动脚本(包括/etc/profile),因为/etc/profile根据此变量的值的不同而行为不同。我可以在Bash的命令行上设置一个环境变量吗?

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

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

编辑: 我所真正需要的是不大不小的命令行选项来BASH将设置环境变量,有些类似-D选项最C(及其他)编译器。这将是一个“一般情况”解决方案。或者,MinTTy的类似选项(命令行或配置)也可以完成这项工作。

对于我的具体需求,我有一个潜在的解决方法的想法:运行一个BASH脚本 - 没有启动脚本 - 设置我需要的变量和另一个shell作为登录shell。

+0

不知道这是否会为你的情况下工作,但trycreating设置该ENV包装脚本变量,然后执行= >>“source/etc/profile”。加上在启动/登录时执行的任何其他脚本。 – zee

+0

@zee我认为。但是,我必须完全复制整个启动过程:登录/交互式,正确的'profile'和'bashrc'文件等。 – Menachem

+0

我可以尝试启动没有启动文件的shell,但只执行一个shell脚本来设置环境变量,然后'exec'sa登录或交互式shell。 – Menachem

回答

2

定义您的快捷方式文件的目标如下:

C:\cygwin64\bin\mintty.exe /bin/bash -l -c "MSYSTEM=MINGW64 exec -l bash" 

此命令:

  • 直接调用bash作为登录shell(-l
  • 其传递的命令(-c)定义感兴趣的环境变量(MSYSTEM=MINGW64),然后调用bashexec -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中演示的那样,可以防止这种情况发生。

+1

@Menachem:我的荣幸;好点重新''';我已经更新了答案,但为了与默认行为保持一致,我使用了'exec -l bash',以便'$ 0'报告'-bash',而不是' -/bin/bash'。 – mklement0

0

您应该可以像执行命令提示一样进行操作。因此,你可以这样做:

set VAR=VarContents 
+0

我能建议您删除这个答案吗?它在我的答案中重复了内容(甚至在您发布自己的答案时,它的原始形式仍然存在),而且它本身不足以解决OP的问题。 – mklement0

1

虽然我已经接受了上述的回答,我发现这个链接,专门用于解决我的问题的第二部分(Mintty具体)或运行前设置环境变量的另一种方式命令。

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

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

(由Mintty Tips建议:Setting environment variables

相关问题