我想在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
有关克服这一障碍的任何想法吗?
答案 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配置文件中以获得相同的结果。