zxCoder
V2EX  ›  问与答

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

  •  
  •   zxCoder · Apr 15, 2021 · 910 views
    This topic created in 1878 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
        1
    ReferenceE  
       Apr 15, 2021 via Android
    建议贴一下错误输出
    zxCoder
        2
    zxCoder  
    OP
       Apr 15, 2021
    @ReferenceE 代码没有运行错误,只是我执行的这个脚本命令不能达到预期结果
    ReferenceE
        3
    ReferenceE  
       Apr 15, 2021 via Android
    @zxCoder ...
    ysc3839
        4
    ysc3839  
       Apr 15, 2021 via Android
    把脚本发来看看吧
    msg7086
        5
    msg7086  
       Apr 16, 2021
    你写个脚本,把传入的 argv 全部打印出来看看不就知道哪里不一样了。
    最终系统执行的语句也不是字符串而是数组,字符串是要经过 Shell 解析成数组的。
    比如说在 bash 下运行 ls -l /u* 的话,实际执行的是 ['ls', '-l', '/usr'] 。
    zxCoder
        6
    zxCoder  
    OP
       Apr 16, 2021
    @msg7086

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

    请问这个具体是什么意思
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1251 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 17:44 · PVG 01:44 · LAX 10:44 · JFK 13:44
    ♥ Do have faith in what you're doing.