Seite 1 von 2
[Gelöst] Shell()-Befehl unter Linux und bsync-Parameter
Verfasst: Mi 10. Mär 2021, 07:23
von herz4
Der Shell()-Befehl unter Linux lässt sich nach meiner Beobachtung (immer noch) nicht durch den bsync-Parameter, den letzten, dazu veranlassen, mit der Script-Abarbeitung zu warten, bis der Shell()-Befehl abgearbeitet ist. Oder?
Gibt es dafür einen besseren Ersatz, als ich es bisher programmiere, so dass das Script wartet:
Code: Alles auswählen
MsgBox "Fehler: " + Shell("gnome-terminal", 1, "-- ssh ...")
Hier wird also eine Meldung mit dem Shell()-Befehl zusammen erzeugt, die "Fehler: 0" anzeigt, wenn der Shell()-Befehl "gefressen" wurde, und von mir nach Abarbeitung des Terminalbefehls per OK-Button geschlossen werden muss, damit das Script weiter arbeitet. Unelegant - aber wirkt zumindest "wartend".
Re: Shell()-Befehl unter Linux und bsync-Parameter
Verfasst: Mi 10. Mär 2021, 08:48
von gogo
sollte auf die Ausgabe des Kommandos "shell" warten und dann erst - ohne weitere Rückfrage im code weitermachen.
Alternativ kannst Du auch das Shell-Kommando eine Datei erstellen lassen und in einem Loop checken ob's die Datei schon gibt ... viele viele Möglichkeiten ...
Re: Shell()-Befehl unter Linux und bsync-Parameter
Verfasst: Mi 10. Mär 2021, 11:20
von herz4
gogo hat geschrieben: ↑Mi 10. Mär 2021, 08:48
sollte auf die Ausgabe des Kommandos "shell" warten und dann erst - ohne weitere Rückfrage im code weitermachen ...
Leider funzt das in meiner Umgebung nicht! Shell() gibt unmittelbar nach Aufruf den Fehlercode, hier "0", zurück, womit dann auch "foo" zugewiesen wurde, und die "Fahrt" geht dann weiter ...
Das mit dem Loop ist natürlich elegant, wenn man zu lange warten müsste, wenn 's vielleicht mehrere Minuten brauchen wollte. Bei mir sind es ~20s, die warte ich und "Enter". Aber ich fragte mich eben, a) bin ich - noch immer - zu blöd, shell() richtig einzusetzen, und b) gibt es nicht was - wirklich - Elegantes
Jedenfalls danke ich für Deine Anregung. Vielleicht kannst Du noch ein, zwei gucken lassen?
Re: Shell()-Befehl unter Linux und bsync-Parameter
Verfasst: Mi 10. Mär 2021, 15:15
von gogo
...Shell() gibt unmittelbar nach Aufruf den Fehlercode, hier "0"...
dann ist das Kommando auch beendet...
hast Du die shell-Funktion korrekt angewendet? So wie dein Code aussieht nämlich nicht:
Code: Alles auswählen
'FALSCH:
Shell("gnome-terminal", 1, "-- ssh ...")
'RICHTIG:
Shell("gnome-terminal", 1, "-- ssh ...", True)
Re: Shell()-Befehl unter Linux und bsync-Parameter
Verfasst: Mi 10. Mär 2021, 18:00
von herz4
Danke für Deine weitere Anregung bzw. Nachfrage.
Ich habe erneut getestet, nunmehr nochmals und mit dem (nicht funktionierenden) bsync-Parameter, also mit
gogo hat geschrieben: ↑Mi 10. Mär 2021, 15:15
Shell("gnome-terminal", 1, "-- ssh ...", True)
und es wird NICHT angehalten.
Problem dahinter sind doch nach meinem Halbwissen die Prozesssteuerungen, die sich zwischen Linux und Win sehr unterscheiden. Linux benutzt gegeneinander abgeschottete Threads(?), deren Nummern(?) man wohl mit viel Aufwand auch jeweils ermitteln kann. Aber wohl selbst mit diesen Prozessnummern ist es vermeintlich nicht so ohne weiteres möglich, deren Beendigung "vermelden" zu lassen.
Der Shell()-Befehl wird umgehend nach dessen Absetzen mit Fehlercode quittiert und also - durch nichts - erst später!(?)
Re: Shell()-Befehl unter Linux und bsync-Parameter
Verfasst: Mi 10. Mär 2021, 21:03
von gogo
die 0 die Du als "Fehlercode" zurückbekommst ist der Exit-Status des Programms (in Deinem Fall ist das "gnome-terminal") - und 0 bedeutet: KEIN Fehler ist aufgetreten.
Einen Syntaxfehler (und "-- ssh ..." ist sicher einer) wird als "Programmende" von "-- ssh ..." interpretiert und das Terminal schließt sich OHNE FEHLER da gnome-terminal keinen solchen verursacht hat - damit kann der LO-Makro-Code weiterlaufen.
Ich hab' hier ein Kubuntu 20.04 mit LO 6.4.6.2 und da funktioniert der Shell-Befehl wie er soll.
Re: Shell()-Befehl unter Linux und bsync-Parameter
Verfasst: Do 11. Mär 2021, 14:54
von herz4
Danke gogo.
Zwischen Kubuntu und anderen Ubuntu-Versionen vermute ich keinen so großen Unterschied, als dass nicht zu hoffen steht, dass in allen diesen LO mit dem Shell()-Befehl incl. bsync funzt.
Somit steht für mich sogar das Umgekehrte zu befürchten. Ist Linux Mint eine der wenigen(?) Distros, wo er nicht geht?
Mit gespannter Neugierde, herz4
Re: Shell()-Befehl unter Linux und bsync-Parameter
Verfasst: Do 11. Mär 2021, 15:08
von gogo
Code: Alles auswählen
sub test
shell("gnome-terminal", 1, "-e '/bin/bash -i'", True)
print "Fertig"
end sub
Sofern "-e" der richtige Parameter für "gnome-terminal" ist, sollte dieses Makro warten, bis Du das Terminal-Fenster geschlossen hast.
poste doch mal die gesamte Codezeile deines Makros. Es liegt mit Sicherheit am shell-Kommando.
Re: Shell()-Befehl unter Linux und bsync-Parameter
Verfasst: Do 11. Mär 2021, 15:53
von herz4
Gogo, ich habe eben Dein "test"-Makro durchlaufen lassen. Wie eh, das Terminalfenster ploppt auf und die Meldung "Fertig" ist dahinter schon da, oder anders, schiebe ich das Terminalfenster beiseite, dann ist da die "Fertig"-Meldung. Leider wartet hier "nichts", außer ich selbst auf den richtigen Gedanken ...
Danke für Deine Mühe und Deine Suche nach Lösung.
Re: Shell()-Befehl unter Linux und bsync-Parameter
Verfasst: Do 11. Mär 2021, 18:08
von gogo
ist "-e" der richtige Parameter für "gnome-terminal"? Manchmal ist der auch "-c". Mit einer aktuellen Mint-Version kann ich derzeit leider nicht testen.
Steht im Terminalfenster, das aufpoppt, irgendwas außer dem Prompt?