我想在 mintty 中运行一个 C 程序并将stderr
输出流转移到文件 debug.txt。这可以通过以下方式实现:
./zombie_jump 2>debug.txt
但是,我在从 Windows 命令行启动它时遇到了问题。
mintty -s 70,55 ./zombie_jump 2>debug.txt
表现得就像2>debug.txt
命令被遗忘了一样(运行程序但不转移错误流),并且
mintty -s 70,55 "./zombie_jump 2>debug.txt"
行为就像我发送了“./zombie_jump 2>debug.txt”一样,产生了错误Failed to run ./zombie_jump 2>debug.txt: No such file or directory
。
我应该使用什么命令?
编辑:
mintty -s 70,55 './zombie_jump 2>debug.txt'
返回Failed to run ./zombie_jump : No such file or directory
并创建一个名为 的文件debug.txt'
。
答案1
这里的错误很容易理解:mintty
没有将程序输出转发到(大概是)cmd
设置输出重定向的地方。相反,它会在自己的 GUI 窗口中显示输出。毕竟,这就是终端仿真器的设计目的。:)
输出重定向是 shell 的一个功能。如果你只是运行mintty my_command
,那么你根本就没有使用 shell。相反,mintty
直接启动my_command
。
如果您引用"my_command 2>out.err"
,则表示您mintty
正在寻找具有该(完整)名称的命令。这相当于"my_command 2>out.err"
在常规 Linux shell 中键入。无论哪种方式都不起作用。
既然我们已经确定这是一个 shell 功能,那么显然我们需要一个 shell。一个常见的选择是 Bash。Bash 可以在启动时传递一个命令字符串来执行,如下所示:
bash -c "my_command 2>out.err"
这意味着我们可以像这样使用它mintty
:
mintty /bin/bash -c "my_command 2>out.err"
在我的计算机上,以这种方式启动的 Cygwin Bash shell 继承了我在 中的工作目录cmd
。