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;
}