在Cygwin bash下运行.bat脚本

时间:2014-07-18 18:33:39

标签: bash shell cygwin

我想在Cygwin bash shell下使用现有的DOS / Windows .bat脚本。 .bat脚本会创建一些在.bat脚本结束后需要存在的变量。

这样可行,但不保留变量。

$ ./.phs_project_setup.bat .

看来这并没有延伸到采购.bat脚本,因此它创建的变量仍然存在于环境中。

$ . ./.phs_project_setup.bat .
-bash: @ECHO: command not found
-bash: SET: command not found
-bash: $'\r': command not found
-bash: REM: command not found

有关克服这一障碍的任何想法吗?

4 个答案:

答案 0 :(得分:1)

我所做的是将环境写入文件,然后使用' cygpath -u'迭代文件。在每个价值上。也许我错过了一些,但似乎cygpath只会改变一些看起来像路径的东西。例如,它不会更改Oracle连接字符串; "用户/通行证@ DB&#34 ;.我添加了' export'到每行的开头,以便它可以被发送到bash shell。这不是一步,但更好。

答案 1 :(得分:0)

请记住,Unix系统通常区分大小写。 cygwin的bash可以直接运行Windows可执行文件,但它仍然是一个感性的案例。 SET不是有效的bash命令,而set是。

您可以强制它来源文件并尝试运行它,但它只能运行与cmd命令具有1:1名称对应关系的shell内置命令。因此set有效,但@echo不会,因为@无意义。同样适用于rem

答案 2 :(得分:0)

我建议尝试使用批处理解释程序(也就是COMSPEC环境变量,它只是CMD)来运行批处理脚本,然后回显出它在此问题中所设置的环境:How I can use PowerShell with the Visual Studio Command Prompt? < / p>

然后,您可以尝试以类似的方式设置环境。请注意,您可能遇到斜杠方向,驱动器名称和其他类似的问题

答案 3 :(得分:0)

听起来你需要运行批处理文件,然后启动cygwin。如果是这样,请从您使用的任何文件(例如cygwin.bat)调用批处理文件以启动cygwin。然后变量应该可用。

或者,我也将所需的位移动到正确的unix配置文件中以获得相同的结果。