假设我有一个设置环境变量的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/