zxCoder
V2EX  ›  问与答

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

  •  
  •   zxCoder · Apr 15, 2021 · 1183 views
    This topic created in 2037 days ago, the information mentioned may be changed or developed.

    遇到一个难搞的问题,同样的指令,在命令行可以正常跑,用 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]", "");;
            }
    
    6 replies  •  2021-04-16 09:17:59 +08:00
    ReferenceE
    ReferenceE
    Apr 15, 2021 via Android
    1
    建议贴一下错误输出
    zxCoder
    zxCoder
    OP
    Apr 15, 2021
    2
    @ReferenceE 代码没有运行错误,只是我执行的这个脚本命令不能达到预期结果
    ReferenceE
    ReferenceE
    Apr 15, 2021 via Android
    3
    @zxCoder ...
    ysc3839
    ysc3839
    Apr 15, 2021 via Android
    4
    把脚本发来看看吧
    msg7086
    msg7086
    Apr 16, 2021
    5
    你写个脚本,把传入的 argv 全部打印出来看看不就知道哪里不一样了。
    最终系统执行的语句也不是字符串而是数组,字符串是要经过 Shell 解析成数组的。
    比如说在 bash 下运行 ls -l /u* 的话,实际执行的是 ['ls', '-l', '/usr'] 。
    zxCoder
    zxCoder
    OP
    Apr 16, 2021
    6
    @msg7086

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

    请问这个具体是什么意思
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2400 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 04:51 · PVG 12:51 · LAX 20:51 · JFK 23:51
    ♥ Do have faith in what you're doing.