2013-08-15 10 views
5

È possibile eseguire i seguenti comandi inviati tramite System.Diagnostics.Process?Comandi inviati tramite System.Diagnostics.Process on Mono

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

Ho provato a fissare il nome del file in "/ bin/bash", con quanto sopra come argomenti, senza successo.

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

risposta

8

bash sta interpretando il vostro comando come un nome di file seguito da argomenti, il che significa che invoca echo e passa tutto il resto (compreso il tubo |) ad esso per la stampa in modo da ottenere test | sudo -S shutdown -r +1 eco e sudo no essere eseguito.

È necessario utilizzare l'opzione -c per eseguire un comando. Inoltre, dovresti citare il comando stesso in modo che venga passato come un singolo argomento. Qualcosa del genere dovrebbe funzionare:

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

Funziona su Linux. Grazie. –

+1

Questo metodo espone la tua password di root, dal momento che creerà un processo come "/ bin/bash -c echo test | sudo -S shutdown -r +1", quindi se esegui "ps aux" chiunque può vederlo o registrare esso. –

+0

Sì, esporterà la password dell'utente, ed è quasi inutile usare 'echo' quando si può scrivere sul pipe da soli. – Jester