Ich habe ghc 6.12.3 und Ubuntu 11.04 auf meinem Laptop installiert.
Ich hätte gerne eine Funktion, die einige Shell-Befehle benötigt und sie als Superuser (wie sudo update-manager, sudo iwlist ....) in Haskell ausführt. Ich weiß, dass das System.Process-Modul einige Funktionen wie createProcess, runInteractiveCommand hat. Aber es gibt für einen einzelnen rohen Befehl oder einen einzelnen Shellbefehl, nicht für zusammengesetzte commnads wie "sudo update-manager". Alle meine Experimente an diesen Funktionen zur Ausführung von "sudo ..." scheiterten. Das Terminal, mit dem ich meine Haskell-Funktion ausgeführt habe, hatte keine Antwort.
Ich habe auch das HSH-Paket angeschaut. Aber es scheint mir, dass dort exportierte Funktionen nicht gut für Sudo-Befehle sind.
Ich schätze, dass das Ausführen von Befehlen wie "sudo update-manager" zwei Prozesse erfordert. Einer ist für "Sudo" und der andere ist für "Update-Manager". Also muss ich Funktionen wie "createProcess" zweimal aufrufen und sie irgendwie verbinden, damit der zweite Prozess für "update-manager" Superuser-Privilegien vom ersten Prozess für "sudo" bekommt.
Vielen Dank im Voraus für Hilfe!
Versuchen Sie readProcess
von System.Process
%Vor%
readProcess
gibt einen externen Prozess frei, liest dessen Standardausgabe streng blockiert, bis der Prozess endet, und gibt die Ausgabezeichenfolge.
Führen Sie es wie folgt aus:
%Vor% Dies führt sudo
mit den Optionen -S
und dem Programm aus. -S
wird benötigt, um das Passwort von stdin zu lesen. Das Passwort muss mit einem Zeilenumbruch enden, daher fügt das Programm eins hinzu.
Beantworten Sie den letzten Absatz. sudo
ist ein normales Programm, keinerlei Magie. Es passiert einfach, andere Programme zu starten. Das Gleiche gilt für Ihr Haskell-Programm. Ihr Programm läuft sudo
und sudo
läuft update-manager
Also nein, Sie sollten nicht zwei Prozesse erstellen.
Haben Sie System.Process.system ausprobiert?
%Vor%Das funktioniert für mich (GHC 7.0.3). Auch für das Scripting in Haskell im Allgemeinen (einschließlich sudo) können Sie sich eine Präsentation ansehen "Praktisch Haskell: Scripting mit Typen " von Don Stewart.