c#调用shell命令
public struct ShellReturn { public int ret; public string stdout; public string stderr; } public static ShellReturn CallShellCommand (ArrayList cmds) { ShellReturn ret; ProcessStartInfo pInfo = new ProcessStartInfo (); pInfo.Arguments = ""; pInfo.FileName = "/bin/bash"; Process p = new Process (); p.StartInfo = pInfo; p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true; p.StartInfo.CreateNoWindow = true; p.Start (); StreamWriter myStreamWriter = p.StandardInput; StreamReader sout = p.StandardOutput; StreamReader serr = p.StandardError; // myStreamWriter.WriteLine ("sudo useradd -d /home/wp -s /bin/bash -m wp"); // myStreamWriter.WriteLine ("sudo su root -c 'echo \"wp:wp\" | chpasswd'"); // myStreamWriter.WriteLine ("ls ~/.mozilla/"); foreach(string cmd in cmds) { myStreamWriter.WriteLine (cmd); } myStreamWriter.WriteLine ("exit $?"); p.StandardInput.Flush (); p.WaitForExit (); ret.stdout = sout.ReadToEnd ().ToString (); ret.stderr = serr.ReadToEnd ().ToString (); ret.ret = p.ExitCode; p.Close (); return ret; }
调用:
private string Test2 () { ArrayList cmds = new ArrayList(); cmds.Add("ls ~"); cmds.Add("mkdir /var/tt"); ShellReturn r; r = CallShellCommand (cmds); return "exitcode: " + r.ret + "\nstdout:\n" + r.stdout + "\nstderr:\n" + r.stderr; }