繁体   English   中英

我可以在Bash的命令行上设置环境变量吗?

[英]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 ),然后调用bashexec -l bash )的新副本,它继承了现有的环境,加上新的定义,但是获取了配置文件的来源。 (s)再次,由于-l
    (和prepends -$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM