运行 "./" bash/batch 带有 cygwin 的文件
Run "./" bash/batch file with cygwin
嗯,思路是这样的,
我有 linux 的 bash 文件,显然我通过制作 ./my_run
运行 它。
问题是我在 windows 所以我下载并安装了 cygwin。
我将 cygwin bin 添加到环境变量并检查至少 "ls" 是否有效,所以我猜我做得很好。
当我尝试使用它显示的 cmd 运行 它时:
'.' is not recognized as an internal or external command,
operable program or batch file.
好像没有正确安装 cygwin 变量(正如我所说,我尝试了 ls 并且可以正常工作)。
然后我直接用 cygwin 尝试了它,在执行 ./my_run
时我让它工作正常。
那么我可以使用 ls 之类的命令,但是在执行 ./ 时它在 cmd 上不起作用,这是怎么回事?我该如何解决这个问题?
如果你打开 Cygwin 和运行那里的命令你应该没问题。
好吧,cygwin 只是一个共享库和许多使用它的东西(程序)(阅读 Cygwin 文档)。 cygwin.dll
更改内部路径解析 /
字符以允许您说 ./my_script
并在执行实际的 windows 调用之前将其转换为 .\my_script
,它还添加了适当的扩展到可执行文件以允许它执行 windows 二进制文件。只要你使用它,这种魔法就会持续存在。 cmd.exe
是 Microsoft Windows 命令 shell 完全不知道 Cygwin 的共享库,因此它不使用它,因此它不会调用它进行路径转换,即使你填充了 zetabytes 的环境。当您在 Cygwin 终端中 运行 时,您正在 运行ning bash
shell,这是一个 Cygwin 可执行文件,链接到 cygwin.dll
。它设法将 Cygwin 库用于所有 unix 系统调用仿真,因此当您传递它时,例如到 exec("./my_script", ...);
,它在内部将其转换为尝试 ./my_script
,然后是 .\my_script
、./my_script.exe
,... .com
和 [=22= 也是如此] 扩展。
这个事实常常让一些人说 Cygwin 不是一个好的、高效的环境。但目的不是为了高效(而且它是,因为它缓存条目并使事情最好地变得高效)而是为了兼容。
在您的示例中,ls
是一个 Cygwin 可执行文件,它模仿来自 unix 系统的 /bin/ls
可执行文件。它使用 Cygwin 库,因此所有路径解析都将正确进行(好吧,在某些限制下,正如您将在一些测试后看到的那样)并且一切都会正常工作。但是您不能假装您的所有 Windows 应用程序突然改变自己并开始工作,就好像它们在不同的环境中一样。这需要您必须自己尝试一些尝试和错误的方法。并阅读 Cygwin 文档,它非常好,涵盖了我在这里所说的所有内容。
嗯,思路是这样的,
我有 linux 的 bash 文件,显然我通过制作 ./my_run
运行 它。
问题是我在 windows 所以我下载并安装了 cygwin。
我将 cygwin bin 添加到环境变量并检查至少 "ls" 是否有效,所以我猜我做得很好。
当我尝试使用它显示的 cmd 运行 它时:
'.' is not recognized as an internal or external command,
operable program or batch file.
好像没有正确安装 cygwin 变量(正如我所说,我尝试了 ls 并且可以正常工作)。
然后我直接用 cygwin 尝试了它,在执行 ./my_run
时我让它工作正常。
那么我可以使用 ls 之类的命令,但是在执行 ./ 时它在 cmd 上不起作用,这是怎么回事?我该如何解决这个问题?
如果你打开 Cygwin 和运行那里的命令你应该没问题。
好吧,cygwin 只是一个共享库和许多使用它的东西(程序)(阅读 Cygwin 文档)。 cygwin.dll
更改内部路径解析 /
字符以允许您说 ./my_script
并在执行实际的 windows 调用之前将其转换为 .\my_script
,它还添加了适当的扩展到可执行文件以允许它执行 windows 二进制文件。只要你使用它,这种魔法就会持续存在。 cmd.exe
是 Microsoft Windows 命令 shell 完全不知道 Cygwin 的共享库,因此它不使用它,因此它不会调用它进行路径转换,即使你填充了 zetabytes 的环境。当您在 Cygwin 终端中 运行 时,您正在 运行ning bash
shell,这是一个 Cygwin 可执行文件,链接到 cygwin.dll
。它设法将 Cygwin 库用于所有 unix 系统调用仿真,因此当您传递它时,例如到 exec("./my_script", ...);
,它在内部将其转换为尝试 ./my_script
,然后是 .\my_script
、./my_script.exe
,... .com
和 [=22= 也是如此] 扩展。
这个事实常常让一些人说 Cygwin 不是一个好的、高效的环境。但目的不是为了高效(而且它是,因为它缓存条目并使事情最好地变得高效)而是为了兼容。
在您的示例中,ls
是一个 Cygwin 可执行文件,它模仿来自 unix 系统的 /bin/ls
可执行文件。它使用 Cygwin 库,因此所有路径解析都将正确进行(好吧,在某些限制下,正如您将在一些测试后看到的那样)并且一切都会正常工作。但是您不能假装您的所有 Windows 应用程序突然改变自己并开始工作,就好像它们在不同的环境中一样。这需要您必须自己尝试一些尝试和错误的方法。并阅读 Cygwin 文档,它非常好,涵盖了我在这里所说的所有内容。