6

是否可以通过执行以下管道命令System.Diagnostics.Process

echo "test" | sudo -S shutdown -r +1

我尝试将文件名设置为“/bin/bash”,并将上述内容作为参数,但没有成功。

...
var processStartInfo = new ProcessStartInfo { FileName = "/bin/bash", Arguments = "echo \"test\" | sudo -S shutdown -r +1" };
process.StartInfo = processStartInfo;
...
4

1 回答 1

10

bash将您的命令解释为文件名后跟参数,这意味着它调用echo并将所有其余部分(包括 pipe |)传递给它以进行打印,因此您将得到test | sudo -S shutdown -r +1回显并且sudo不会被执行。

您应该使用该-c选项来执行命令。此外,您应该引用命令本身,以便它作为单个参数传递。像这样的东西应该工作:

var processStartInfo = new ProcessStartInfo
{
    FileName = "/bin/bash",
    Arguments = "-c \"echo test | sudo -S shutdown -r +1\""
};
于 2013-08-19T14:26:13.813 回答