Terminal vs. RunProgram()

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Terminal vs. RunProgram()

Beitrag von Nino »

Hallo!

Ich möchte unter Linux mit PureBasic ein anderes Programm ausführen.
Das Problem: Obwohl der Programmaufruf im Terminal wie erwartet funktioniert, funktioniert er mit RunProgram() nicht.

Im Einzelnen (getestet unter Linux Mint 19.3 Cinnamon mit PB 5.70 x64):
Ich habe eine Datei "script.r" mit dem Inhalt
3 * 4
Ausführung dieser Befehlszeile

Code: Alles auswählen

Rscript script.r
im Terminal zeigt [1] 12.
Auch die Umleitung in eine Datei funktioniert.

Code: Alles auswählen

Rscript script.r > out.txt
schreibt [1] 12 in die Datei.

Wenn ich "Rscript" durch den kompletten Pfadnamen "/usr/bin/Rscript" ersetze, funktioniert alles genauso.

Im Gegensatz dazu mit PureBasic:

Code: Alles auswählen

; Linux Mint 19.3 Cinnamon

SetCurrentDirectory("/home/nino/Schreibtisch/")
Debug GetCurrentDirectory()

; Debug RunProgram("Rscript", "./script.r > r_out.txt", "")         ; -> 1
Debug RunProgram("/usr/bin/Rscript", "/home/nino/Schreibtisch/script.r > r_out.txt", "")  ; -> 1
RunProgram() liefert in beiden Fällen 1 zurück, aber sonst sehe ich nichts. Eine Datei namens "r_out.txt" wird nicht erzeugt.

Wie kann ich es mit PureBasic anstellen, dass Rscript ein Skript ausführt und das Ergebnis in eine Datei schreibt?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Terminal vs. RunProgram()

Beitrag von NicTheQuick »

Code: Alles auswählen

Debug RunProgram("/usr/bin/Rscript", "/home/nino/Schreibtisch/script.r > r_out.txt", "")  ; -> 1
Das Schreiben in die Datei mittels ">"- Operator ist ein Befehl von Bash oder eben deiner normalen Shell. 'RunProgram()' kann tatsächlich nur Programme mit Parametern ausführen und Operatoren wie du sie aus Bash kennst, nicht interpretieren und ausführen. Umgehen könntest du das so:

Code: Alles auswählen

RunProgram("/bin/bash", ~"-c \"Rscript /home/nino/Schreibtisch/script.r > r_out.txt\"", "")
Das verhält sich dann genau so wie wenn du es manuell im Terminal eingibst.
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Terminal vs. RunProgram()

Beitrag von Nino »

Hallo NicTheQuick,

vielen Dank für Deine Antwort!
NicTheQuick hat geschrieben:

Code: Alles auswählen

RunProgram("/bin/bash", ~"-c \"Rscript /home/nino/Schreibtisch/script.r > r_out.txt\"", "")
... funktioniert leider auch nicht. Vielleich hat mein Linux-System irgendwo 'ne Macke, aber ich habe keine Ahnung wo ich anfangen soll zu suchen.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Terminal vs. RunProgram()

Beitrag von NicTheQuick »

Was ist, wenn du die Ausgabedatei r_out.txt auch absolut angibst oder den WorkingDirectory-Parameter von RunProgram an den Schreibtisch anpasst?

Code: Alles auswählen

RunProgram("/bin/bash", ~"-c \"Rscript /home/nino/Schreibtisch/script.r > r_out.txt\"", "/home/nino/Schreibtisch")

Code: Alles auswählen

RunProgram("/bin/bash", ~"-c \"Rscript /home/nino/Schreibtisch/script.r > /home/nino/Schreibtisch/r_out.txt\"", "")
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Terminal vs. RunProgram()

Beitrag von Nino »

Das funktioniert :!:
Und meine Antwort von gestern war falsch, tatsächlich funktioniert der betr. Code auch. Ich hatte nur leider einen blöden Fehler gemacht. :oops:

Nochmal ganz herzlichen Dank für die Unterstützung! Ich hatte zuvor schon gefühlt "das halbe Internet" durchsucht, aber keine Lösung gefunden.
Antworten