我可以在 Bash 的命令行上设置环境变量吗?
Can I set an environment variable on Bash's command line?
我正在尝试为 Bash 设置环境变量。但是,我需要在 before 任何 shell 的启动脚本(包括 /etc/profile
)之前设置它,因为 /etc/profile
的行为基于这个变量的值。
具体来说,我想创建一个类似于 git-bash
的 MinTTy 快捷方式,但我需要在 shell 启动之前或至少之前设置 MSYSTEM
环境变量它开始处理任何启动脚本。
在启动 shell 之前让 MinTTy 设置环境变量的解决方案也将被接受。
编辑:
我真正想要的是 BASH 的命令行选项,它将设置一个环境变量,有点类似于大多数 C(和其他)编译器的 -D
选项。这将是一个 "general case" 解决方案。或者,与 MinTTy 类似的选项(命令行或配置)也可以完成这项工作。
根据我的具体需要,我有一个潜在的解决方法:运行 一个 BASH 脚本 - 没有启动脚本 - 设置我需要的变量和 exec
另一个 shell 作为登录名 shell。
按如下方式定义快捷方式文件的目标:
C:\cygwin64\bin\mintty.exe /bin/bash -l -c "MSYSTEM=MINGW64 exec -l bash"
这个命令:
- 直接调用
bash
作为登录 shell (-l
)
- 向它传递一个定义感兴趣的环境变量 (
MSYSTEM=MINGW64
) 的命令 (-c
),然后调用 bash
的新副本 (exec -l bash
),它继承了现有的环境,加上新的定义,但由于 -l
而再次获取配置文件
(并在 [=20=]
(-bash
) 中报告的可执行文件名称前加上 -
,如果你只用 -
启动 Mintty 就会发生这种情况,这就是常规 Cygwin64 Terminal
快捷方式。
另一种方法是先在Windows中设置环境变量。
[不是 OP 的选项]如果环境变量应该总是具有相同的值,设置它始终如下:运行 sysdm.cpl
,转到 Advanced
选项卡,单击 Environment Variables...
并根据需要定义变量 MSYSTEM
。
要定义变量ad-hoc,创建一个batch文件如下,并创建快捷方式目标批处理文件:
@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 之前短暂打开一个常规控制台 window,这可能是不需要的。
一个简单的帮助程序 WSH 脚本,如我的 中所示,可以防止这种情况。
您应该能够像在命令提示符下一样进行操作。因此,你可以这样做:
set VAR=VarContents
虽然我已经接受了上面的答案,但我发现这个 link 专门解决了我问题的第二部分(特定于 Mintty)或在 运行 之前设置环境变量的替代方法命令。
Windows快捷方式的内容可以是:
C:\cygwin64\bin\mintty.exe -t "Title" /bin/env "MSYSTEM=MINGW64" /bin/bash -l
我正在尝试为 Bash 设置环境变量。但是,我需要在 before 任何 shell 的启动脚本(包括 /etc/profile
)之前设置它,因为 /etc/profile
的行为基于这个变量的值。
具体来说,我想创建一个类似于 git-bash
的 MinTTy 快捷方式,但我需要在 shell 启动之前或至少之前设置 MSYSTEM
环境变量它开始处理任何启动脚本。
在启动 shell 之前让 MinTTy 设置环境变量的解决方案也将被接受。
编辑:
我真正想要的是 BASH 的命令行选项,它将设置一个环境变量,有点类似于大多数 C(和其他)编译器的 -D
选项。这将是一个 "general case" 解决方案。或者,与 MinTTy 类似的选项(命令行或配置)也可以完成这项工作。
根据我的具体需要,我有一个潜在的解决方法:运行 一个 BASH 脚本 - 没有启动脚本 - 设置我需要的变量和 exec
另一个 shell 作为登录名 shell。
按如下方式定义快捷方式文件的目标:
C:\cygwin64\bin\mintty.exe /bin/bash -l -c "MSYSTEM=MINGW64 exec -l bash"
这个命令:
- 直接调用
bash
作为登录 shell (-l
) - 向它传递一个定义感兴趣的环境变量 (
MSYSTEM=MINGW64
) 的命令 (-c
),然后调用bash
的新副本 (exec -l bash
),它继承了现有的环境,加上新的定义,但由于-l
而再次获取配置文件 (并在[=20=]
(-bash
) 中报告的可执行文件名称前加上-
,如果你只用-
启动 Mintty 就会发生这种情况,这就是常规Cygwin64 Terminal
快捷方式。
另一种方法是先在Windows中设置环境变量。
[不是 OP 的选项]如果环境变量应该总是具有相同的值,设置它始终如下:运行
sysdm.cpl
,转到Advanced
选项卡,单击Environment Variables...
并根据需要定义变量MSYSTEM
。要定义变量ad-hoc,创建一个batch文件如下,并创建快捷方式目标批处理文件:
@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 之前短暂打开一个常规控制台 window,这可能是不需要的。
一个简单的帮助程序 WSH 脚本,如我的
您应该能够像在命令提示符下一样进行操作。因此,你可以这样做:
set VAR=VarContents
虽然我已经接受了上面的答案,但我发现这个 link 专门解决了我问题的第二部分(特定于 Mintty)或在 运行 之前设置环境变量的替代方法命令。
Windows快捷方式的内容可以是:
C:\cygwin64\bin\mintty.exe -t "Title" /bin/env "MSYSTEM=MINGW64" /bin/bash -l