PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bash-script wird nicht ausgeführt (QProcess)



doitux
21-09-2004, 10:07
Hallo.

Ich hab ein Programm welches mir ein bash-script generiert:

QString atcmd = "/tmp/atcmd";
QFile file1( atcmd ); // Write the text to a file
if ( file1.open( IO_WriteOnly ) ) {
QTextStream stream( &file1 );
stream << "#!/bin/bash -xv\n";
stream << "at -f ";
stream << save;
stream << " ";
stream << start_time;
stream << " ";
stream << start_date;
stream << "\n";
stream << "rm ";
stream << atcmd;
}

danach wird das script ausführbar gemacht:

chmod1 = new QProcess( this );
chmod1->addArgument( "chmod" );
chmod1->addArgument( "ugo+x" );
chmod1->addArgument( save );
chmod1->addArgument( atcmd );
chmod1->start();

jetzt möchte ich gerne das script starten:

go = new QProcess( this );
go->addArgument( atcmd );
go->start();

dieses wird leider nicht richtig abgearbeitet. auf jeden fall kann ich mit einem atq nichts davon sehen. wenn ich das script dann per hand starte funtioniert das.

Hat jemand eine idee was ich da falsch mache?

gruß
doitux

ps: den ganzen quellcode gibts unter http://paste.phpfi.com/30530

peschmae
21-09-2004, 11:52
Funktioniert denn ein
go->addArgument( "bash" );
go->addArgument( -c );
go->addArgument( atcmd );
?

MfG Peschmà

doitux
21-09-2004, 12:27
nein. leider funktioniert das auch nicht. ich habs gerade nochmal ausprobiert.
trotzdem vielen dank für die meldung

anda_skoa
24-09-2004, 17:08
dieses wird leider nicht richtig abgearbeitet. auf jeden fall kann ich mit einem atq nichts davon sehen. wenn ich das script dann per hand starte funtioniert das.


Hab das nur kurz überflogen, aber es sieht für mich so aus als würde das Script nur ein at command starten und eigentlich keine Bash spezifischen Funktionen benötigen.
Was spricht in diesem Fall dagegen, gleich at mit QProcess auszuführen?

Eine indirekte Lösung mit Script ist ziemlich wackelig:
- Benötigt Rechte um eine Datei auf ein Filesystem zu schreiben, dass executeables zulässt
- benötigt Rechte das Executablebit an der gerade erstellten Datei zu setzen
- wird vielleicht nicht nur in der Testversion nach /tmp geschrieben, was bei einem bekannten Namen zu eine Securityproblem wird (gutes Timing vorrausgesetzt kann man das Programm jeden beliebigen Code mit den Rechten seines Benutzers ausführen lassen)

Ciao,
_

doitux
24-09-2004, 18:30
danke für die antwort.
inzwischen weiß ich wo das problem war. ich hatte vergessen mit file1.close() das videorec-script zu schließen. deswegen hatte damals der QProcess mit direkt "at" nicht geklappt. und deshalb hab ich versucht das über ein extra-script zu starten, denn wenn ich in der konsole die "unvollständigen" videorec-scripts mit at zeitgesteuert hab, hatte das funktioniert.

aber trotzdem danke fürs draufschauen

gruß
doitux