首页 > 解决方案 > 如何从 Cygwin 调用 bat / cmd 文件并继承变量?

问题描述

假设我有一个bat(或cmd)设置环境变量的脚本:

rem set_foo.bat
SET foo=XXX

我想从 Cygwin bash 脚本中调用该脚本,以set_foo.bat使 Cygwin bash 脚本可以看到设置的变量。也就是说,这个 Cygwin bash 脚本:

#!/bin/sh
<call set_foo.bat in such a way that FOO becomes visible to this Cygwin script>
echo FOO is ${FOO}

应该打印:

FOO is XXX

这可能吗,怎么做?

PS 1:我知道这里提出的解决方案:cygwin environment variables set in bat file,它们不是我想要的。

PS 2:bat 脚本不在我的控制之下(Cygwin bash 脚本是),所以任何涉及调整 bat 脚本的解决方案都是不可接受的。

PS 3:如果我只是set_foo.bat像这样从 Cygwin bash 脚本调用:

#!/bin/sh
set_foo.bat
echo FOO is ${FOO}

那么 的值FOO是不可见的。也就是说,Cygwin bash 脚本打印:

FOO is 

标签: bashbatch-filecmdcygwin

解决方案


尝试这个:

#!/bin/sh

export $(cmd /c "set_foo.bat & set foo" | grep "^foo=")
echo Foo is $foo

只要set_foo.bat不将值设置%foo%setlocal范围内,该值就应该延续到-interpreted 命令的& set foo一半。cmd.exe这将输出变量=值对,export它将解释为本机变量赋值。


推荐阅读