如何用C#程序运行rxvt命令实现Cygwin终端命令自动化输出?
解决Cygwin rxvt命令自动化执行无输出问题
问题原因
你用rxvt -ls -e sh -c ls >> output.txt测试时无输出,是因为Windows cmd的重定向符号>>被提前解析了——cmd会把rxvt程序本身的输出重定向到文件,但rxvt是终端窗口程序,它的标准输出并不是你要执行的ls命令的结果,所以不会生成目标文件。
修复方案
1. 修正命令格式
把输出重定向逻辑放到sh -c的引号内部,让Cygwin的shell来处理结果输出:
rxvt -ls -e sh -c "ls >> output.txt"
如果目标命令包含参数或空格,要把完整命令和重定向都放进引号,比如:
rxvt -ls -e sh -c "your-target-command --param1 test >> ./data/collect_$(date +%Y%m%d).txt"
2. C#程序中执行的正确写法
用Process.Start直接调用rxvt,避免cmd中转解析参数,示例代码:
using System.Diagnostics; // 替换为你的rxvt实际路径,比如C:\cygwin\bin\rxvt.exe var rxvtPath = @"C:\cygwin64\bin\rxvt.exe"; // 替换为你的目标命令和输出路径 var arguments = @"-ls -e sh -c ""your-target-command >> output.txt"""; var startInfo = new ProcessStartInfo { FileName = rxvtPath, Arguments = arguments, UseShellExecute = false, CreateNoWindow = true // 不需要显示终端窗口时启用 }; using var process = Process.Start(startInfo); process.WaitForExit(); // 等待命令执行完成再继续
3. 调试排查技巧
- 先在cmd里手动执行修正后的命令,确认能生成输出文件后再放到C#代码中
- 如果命令执行失败,添加错误输出重定向,把错误信息写入文件排查:
rxvt -ls -e sh -c "ls >> output.txt 2>&1"
内容的提问来源于stack exchange,提问作者Ryan Schreck
相关产品推荐
相关产品推荐

