bash - 如何从 Cygwin 调用 bat/cmd 文件并继承变量?

标签 bash batch-file cmd cygwin

假设我有一个设置环境变量的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 脚本的解决方案都是 Not Acceptable 。

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

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

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

FOO is 

最佳答案

试试这个:

#!/bin/sh

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

只要 set_foo.bat 没有在 setlocal 范围内设置 %foo% 的值,该值就应该继续到 & set foo cmd.exe 解释命令的一半。这将输出 variable=value 对,export 将解释为 native 变量赋值。

关于bash - 如何从 Cygwin 调用 bat/cmd 文件并继承变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54496701/

相关文章:

windows-xp - 如何从Windows XP的批处理文件设置处理器关联性?

windows - 如何在cmd中链接START命令?

windows - 以系统帐户身份运行时的Windows AWS CLI “Unable to locate credentials”

shell - 是否可以将环境变量设置为 cmd.exe 中的命令输出

linux - 传递文件名并运行的shell脚本

linux - 通过 ssh 运行命令时遇到问题

bash - 从命令行覆盖 Bash 脚本中的变量

linux - hping3 永远不会结束,即使有包号选项

batch-file - 如何设置变量,然后在命令提示符下的同一行中使用它

intellij-idea - IntelliJ Compass 文件观察器