scripten einer "shell" die keine Scripte kann

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
RobertS
Beiträge: 516
Registriert: 15.04.2012 13:50:53
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Rastatt BaWü

scripten einer "shell" die keine Scripte kann

Beitrag von RobertS » 18.02.2017 11:22:42

Ich hätte da gerne folgendes Problem:
ich habe hier eine Hardware die sich vom Rechenknecht aus nur sehr bedingt steuern läßt.
Jetzt gibt es ein Programm bei Debian das diese Hardware anspricht.
Dieses Programm läßt sich mit dem Parameter --shell aufrufen und bietet dann eine Eingabezeile über die sich einiges treiben läßt.
Ich möchte jetzt aber 50 mal das gleiche Kommando in dieser "shell" ausführen, ohne mir die Finger wund zu tippen.
Eine Möglichkeit ein script auszuführen bietet mir diese "shell" leider nicht.
Nach langem Suchen bin ich auf das Paket Debianempty-expect gestoßen.
Eigentlich sollte sich damit mein Vorhaben umsetzen lassen, ich bekomme es aber noch nicht hin.
Weiterführende Doku, abgesehen von der ManPage, leider Fehlanzeige.
Eine Google Suche nach "empty" bringt unendliche Treffer ohne Bezug zu meinem Problem. Das empty leer bedeutet weiß ich auch so, aber irgendetwas mit Bezug zu dem Programm empty war noch nicht dabei.
Mir wäre schon mit kommentierten Scriptbeispielen weitergeholfen.

Grüße

Robert

DeletedUserReAsG

Re: scripten einer "shell" die keine Scripte kann

Beitrag von DeletedUserReAsG » 18.02.2017 11:59:28

Die Hardware und das Programm dazu sind geheim? Weil wenn nicht, könntest du’s mal nennen – dann könnte man mal schauen, worum es geht und was man damit machen kann.

Benutzeravatar
RobertS
Beiträge: 516
Registriert: 15.04.2012 13:50:53
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Rastatt BaWü

Re: scripten einer "shell" die keine Scripte kann

Beitrag von RobertS » 18.02.2017 12:06:05

Hardware und Programm sind nicht geheim, in keinster Weise.
Canon EOS 5DsR und Debiangphoto2, Ziel ist eine Focusreihe.
Mir geht es aber auch um das Verstehen von Empty.

Grüße

Robert

DeletedUserReAsG

Re: scripten einer "shell" die keine Scripte kann

Beitrag von DeletedUserReAsG » 18.02.2017 12:15:18

Mir geht es aber auch um das Verstehen von Empty.
Ach so. Ansonsten hätte ich nämlich vorgeschlagen, einfach gphoto2 aus ’nem Script heraus anzusteuern und die gewünschten Aktionen durchführen zu lassen.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: scripten einer "shell" die keine Scripte kann

Beitrag von rendegast » 18.02.2017 12:28:14

Mal mit sowas versucht?

Code: Alles auswählen

echo [-e]  "show-info\nls\nexit\n" | gphoto2 --shell
Das '-e' ist eventuell nötig oder zu vermeiden
(Hier ist es abhängig von interaktivem Shell-Prompt oder aus Skript heraus).


Bsp.

Code: Alles auswählen

echo [-e] "p\nl\n" | /sbin/fdisk /dev/zero
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
RobertS
Beiträge: 516
Registriert: 15.04.2012 13:50:53
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Rastatt BaWü

Re: scripten einer "shell" die keine Scripte kann

Beitrag von RobertS » 18.02.2017 12:49:39

[quote="rendegast"]Mal mit sowas versucht?

Code: Alles auswählen

echo [-e]  "show-info\nls\nexit\n" | gphoto2 --shell
Das '-e' ist eventuell nötig oder zu vermeiden
(Hier ist es abhängig von interaktivem Shell-Prompt oder aus Skript heraus).

ergibt

Code: Alles auswählen

robert@T500:/$ echo [-e]  "show-info\nls\nexit\n" | gphoto2 --shell
gphoto2: {/} /> [-e] show-info\nls\nexit\n                                     
[-e] show-info\nls\nexit\n
FEHLER: Ungültiger Befehl.
gphoto2: {/} /> 
robert@T500:/$
Der shellmode von gphoto2 ist, leider, auch vorzüglich dokumentiert, außer ein paar dünner Worte in der ManPage findet sich nichts zu dem Ding.

Grüße

Robert

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: scripten einer "shell" die keine Scripte kann

Beitrag von rendegast » 18.02.2017 12:56:36

$ echo [-e] "show-info\nls\nexit\n" | gphoto2 --shell
Die eckigen Klammern '[...]' sollen auf einen optionalen Parameter hinweisen.
Bsp. in nahezu jeder manpage.

Code: Alles auswählen

$ echo  -e  "show-info\nls\nexit\n" | gphoto2 --shell
oder
$ echo      "show-info\nls\nexit\n" | gphoto2 --shell
gphoto2: {/} /> [-e] show-info\nls\nexit\n
[-e] show-info\nls\nexit\n
FEHLER: Ungültiger Befehl.
Das sieht doch schonmal gut aus,
die echo-Parameter werden in die gphoto-Shell übernommen.
(Erzeugen dort zwar in der Form Unfug, aber Du lernst das noch)
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
RobertS
Beiträge: 516
Registriert: 15.04.2012 13:50:53
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Rastatt BaWü

Re: scripten einer "shell" die keine Scripte kann

Beitrag von RobertS » 18.02.2017 13:31:19

rendegast hat geschrieben:
die echo-Parameter werden in die gphoto-Shell übernommen.
(Erzeugen dort zwar in der Form Unfug, aber Du lernst das noch)
Erfreulich wenn denn doch noch Hoffnung für mich besteht.
Mit ein wenig Überlegung hätte ich da auch selber drauf kommen können.

Die Zeile passend modifiziert funktioniert sogar. Danke.
Stellt sich nur jetzt die Frage wie lang das werden darf.

Code: Alles auswählen

echo -e  "capture-image\nset-config manualfocusdrive=6\ncapture-image\nset-config manualfocusdrive=6\ncapture-image\nset-config manualfocusdrive=6\ncapture-image\nset-config manualfocusdrive=6\ncapture-image" | gphoto2 --shell
ergibt tatsächlich 5 Bilder mit unterschiedlicher Focuslage.
Grob vermutet brauche ich 20 bis 30 Bilder in einem Aufruf, wobei der Befehl set-config manualfocusdrive=Zahl im Bereich 0 bis 6 auch mehrfach pro Bild notwendig sein kann.
Also 10 mal set-config manualfocusdrive=5, einmal capture-image.
Und das ganze 20 bis 30 mal.

Problem 1 wäre also erst einmal gelöst.
Das Programm empty hab ich damit aber immer noch nicht verstanden.

Grüße

Robert

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: scripten einer "shell" die keine Scripte kann

Beitrag von rendegast » 18.02.2017 14:42:14

echo -e "capture-image\nset-config manualfocusdrive=6\ncapture-image\nset-config manualfocusdrive=6\ncapture-image\nset-config manualfocusdrive=6\ncapture-image\nset-config manualfocusdrive=6\ncapture-image" | gphoto2 --shell
Iiiih, häßlich.
In anderer Form in einem Skript

Code: Alles auswählen

    echo "
capture-image
set-config manualfocusdrive=6
capture-image
set-config manualfocusdrive=6
capture-image
set-config manualfocusdrive=6
capture-image
set-config manualfocusdrive=6
capture-image
" | gphoto2 --shell
wäre gut konstruierbar

Code: Alles auswählen

echo > .konstrukt
for i in $(seq 1 10); do 
     echo "
capture-image
set-config manualfocusdrive=6
" >> .konstrukt
done
echo "$(cat .konstrukt)"  |  gphoto2 --shell

oder auch einfach
cat .konstrukt  |  gphoto2 --shell
oder

Code: Alles auswählen

echo > .konstrukt
echo "echo \"" >> .konstrukt
for i in $(seq 1 10); do 
     echo "capture-image
set-config manualfocusdrive=6" >> .konstrukt
done
echo "\" | gphoto2 --shell" >> .konstrukt

. ./.konstrukt

Weitere Beispiele für eine solche Shell
'sqlite3', welches als Argument aber auch eine Datei mit sql-Kommandos entgegen nimmt.
'ftp'
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
RobertS
Beiträge: 516
Registriert: 15.04.2012 13:50:53
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Rastatt BaWü

Re: scripten einer "shell" die keine Scripte kann

Beitrag von RobertS » 18.02.2017 15:59:14

rendegast hat geschrieben:
echo -e "capture-image\nset-config manualfocusdrive=6\ncapture-image\nset-config manualfocusdrive=6\ncapture-image\nset-config manualfocusdrive=6\ncapture-image\nset-config manualfocusdrive=6\ncapture-image" | gphoto2 --shell
Iiiih, häßlich.
I…
Aber so was von häßlich.
Für ein erstes kleines Erfolgserlebnis aber schon mal ausreichend, außerdem bekomme ich damit mehr Rückmeldungen wie wenn ich das gleich in ein wüst zusammengestopftes script packe.

Die nächsten Tips von dir führ ich mir in Ruhe zu Gemüte.
Aber schon mal Dank für die Mühe.

Grüße

Robert

Benutzeravatar
RobertS
Beiträge: 516
Registriert: 15.04.2012 13:50:53
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Rastatt BaWü

Re: scripten einer "shell" die keine Scripte kann

Beitrag von RobertS » 19.02.2017 17:29:19

Rückmeldung von mir.
Weil die Hardware sich etwas zickig anstellt war die Lösung mit der langen Befehlszeile doch nicht der Weg zum Ziel.
Das Script autoexpect aus dem Paket Debianexpect hat mir eine ausbaubare Basis verschafft die ich mittlerweile an die Bedürfnisse angepasst habe.
Für Komfortfunktionen wie Anzahl der Bilder einer Reihe und Schrittweite des Focus werd ich mal meine Perl Bücher aus dem Regal ziehen und abstauben.

Grüße

Robert

Benutzeravatar
RobertS
Beiträge: 516
Registriert: 15.04.2012 13:50:53
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Rastatt BaWü

Re: scripten einer "shell" die keine Scripte kann

Beitrag von RobertS » 04.01.2019 15:02:18

Ich hab mich nach langer Zeit mich mal wieder mit dem Thema beschäftigt.
Das aktuelle Debiangphoto2 in Buster kommt mit der Kamera nun problemlos klar.
Das Problem, das mich zu dem Shell Modus von gphoto geführt hat, war das die Knipse nach jedem Aufruf von gphoto den LiveView Modus wieder verlassen hat und ich den dann wieder händisch an der Kamera einschalten mußte. Im Shell Modus wurde die Kamera nach Abarbeitung einer Befehlszeile nicht zurückgesetzt und das nächste Kommando konnte abgesetzt werden.
Mittlerweile besteht das Problem nicht mehr und der Umweg über expect ist nicht mehr notwendig.
Nur für den Fall daß mal jemand das selbe Problem hat und diesen Thread ausgräbt.

Grüße
Robert

Antworten