【问题标题】:run windows command from bash with output to standard out?从bash运行windows命令并输出到标准输出?
【发布时间】:2011-02-02 09:51:06
【问题描述】:

伙计们,我正在使用 git bisect run 等 git 工具,它需要调用命令来构建和测试我的项目。我要做的命令是 nant,它是一个 windows 程序。或者调用 nant 的 build.cmd 脚本。

很容易让 bash 调用 nant 构建来运行。

但困难的部分是如何将标准输出写入文件?

我什至安装了 Windows PowerShell 来尝试从 bash 运行命令。

再次,它可以工作,但标准输出填充显示“权限被拒绝”时 我尝试在构建过程中阅读它。

更新:

运行 nant 时,会使用整个路径。它已安装并运行良好。问题是从 bash 运行时如何获得标准输出。

如果从 Windows 提示符运行 nant,并在行尾使用 "> build.out",您将获得标准输出。但在 bash 下,同样的方法永远不会起作用。它只是说 build.out 被锁定,权限被拒绝。

更新:

使用下面建议的 tee 也不能解决问题。在这种情况下,文件仍然报告“访问被拒绝”,并且在构建运行时尝试读取它。而且,tee 程序从不向标准输出写入任何内容。

【问题讨论】:

  • erm... bash 是一个 unix(esc) shell... 除非您已将“nant”安装到 Windows 中,否则您可以运行它的命令。您还需要注册 nant 以便您可以从任何地方调用它,或者移动到它所在的目录,然后调用该命令。
  • 谢谢,我做了更新来回答你的问题。 Nant 已安装,我们使用 nant 的完全限定路径。问题与如何将标准输出获取到文件和文件上的 tail -f 有关。

标签: windows powershell cygwin mingw cmd


【解决方案1】:

(如果我正确理解您的问题...)

您可能可以使用“tee”命令将输出拆分为文件和标准输出。 echo I am building something | tee build.out 行将在控制台上打印输出并将其保存到名为“build.out”的文件中。

tee 命令通常在 Cygwin 中可用,显然也可以在 msysgit 安装的 Bash shell 中使用(我刚刚测试过它)。这是good reference page了解更多详情。

【讨论】:

  • 感谢您的回复。如上所述使用 tee 有同样的问题和一个额外的问题。也就是说,如果您尝试使用任何编辑器或 tail、less、head、cat 等打开它,文件仍然会给出“访问被拒绝”错误。此外,奇怪的是,tee 程序不会向标准输出写入任何内容。它是沉默的。但文件大小正在增长。只是根本不可能“监控”正在发生的事情。
【解决方案2】:

好的,终于解决了。事实证明,nant 构建脚本正在使用 git 功能擦除所有被忽略的文件以进行清理。那是删除 build.out 文件会导致这些奇怪的问题。现在,该进程将 build.out 文件写入父目录,这样它就不会被删除,现在一切都按预期顺利进行。

【讨论】:

    猜你喜欢
    • 2021-06-24
    • 2014-02-02
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 2023-03-04
    相关资源
    最近更新 更多