bash - 如何从 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
解决方案
尝试这个:
#!/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
它将解释为本机变量赋值。
推荐阅读
- typescript - 如何在打字稿中为具有受保护构造函数的类声明`new()=> T`类型?
- python - 字典的列表值在迭代期间进入无限深度
- google-chrome - 您如何在 Chrome 开发工具中查看通过 AJAX CORS 请求设置的 cookie?
- ios - Docusign iOS SDK 直接发送信封而不打开任何东西也不要求做签名
- flutter - 如何将 async 从第 1 页传递到第 2 页,并在第 2 页执行函数但在第 1 页显示结果?
- javascript - 如何使 YouTube Embed 保持一致?
- list - 将一些ListB作为项目放入ListA,然后清除ListB,ListA也消失了
- powershell - Powershell 脚本不通过任务计划程序运行
- parquet - 列不均匀的 Parquet 文件
- reactjs - 反应 gatsby 中的 UseState Hooks