C#的 ProcessStartInfo 执行命令行指令,可以怎么打印出实际的执行语句吗

2021-04-15 20:21:35 +08:00
 zxCoder

遇到一个难搞的问题,同样的指令,在命令行可以正常跑,用 c#调用就出问题

public static string Run(this string cmd) {
            var escapedArgs = cmd.Replace("\"", "\\\"");
            var process = new Process() {
                StartInfo = new ProcessStartInfo {
                    FileName = "/bin/bash",
                    Arguments = $"-c \"{escapedArgs}\"",
                    RedirectStandardOutput = true,
                    UseShellExecute = false,
                    CreateNoWindow = true,
                }
            };
            process.Start();
            var result = process.StandardOutput.ReadToEnd();
            process.WaitForExit();
            return Regex.Replace(result, @"[\u0001-\u001F]", "");;
        }
539 次点击
所在节点    问与答
6 条回复
ReferenceE
2021-04-15 20:43:42 +08:00
建议贴一下错误输出
zxCoder
2021-04-15 20:49:19 +08:00
@ReferenceE 代码没有运行错误,只是我执行的这个脚本命令不能达到预期结果
ReferenceE
2021-04-15 23:36:25 +08:00
@zxCoder ...
ysc3839
2021-04-15 23:43:51 +08:00
把脚本发来看看吧
msg7086
2021-04-16 05:27:09 +08:00
你写个脚本,把传入的 argv 全部打印出来看看不就知道哪里不一样了。
最终系统执行的语句也不是字符串而是数组,字符串是要经过 Shell 解析成数组的。
比如说在 bash 下运行 ls -l /u* 的话,实际执行的是 ['ls', '-l', '/usr'] 。
zxCoder
2021-04-16 09:17:59 +08:00
@msg7086

“你写个脚本,把传入的 argv 全部打印出来看看不就知道哪里不一样了。”

请问这个具体是什么意思

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/770937

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX