2016-04-25 6 views
3

Ich habe eine Bourne-Again-Shell-Skript-Text ausführbare Datei mit dem Namen engine.bin, die ich installieren möchte.Automatisierung der Installation von Binär in Linux

Wenn ich die ausführbare Datei manuell ./engine.bin installieren erhalte ich einen Bildschirm mit dem EULA ich akzeptieren müssen (durch den Raum schieben), dann akzeptieren, indem yes schreiben und dann den Installationspfad eingeben /usr/local/engine durch Eingabe.

Jetzt möchte ich die Installation automatisch durch Bereitstellung von Skripten ohne manuelle Interaktion. Gibt es eine Möglichkeit, dies zu tun? Ich weiß nicht, ob der Installer irgendwelche Parameter akzeptiert, leider ist das Ding undokumentiert.

+0

Sie die 'expect' Paket verwenden können, wenn es bereits installiert ist in der Umgebung. Lass es mich wissen, wenn es nicht so ist, und dann denk an andere Wege, wie du das tun kannst. – jgr208

+1

Ich bin in der Lage zu installieren erwarten und es funktioniert. – dArignac

+0

großartig zu hören! Ich hätte eine Antwort daraus gemacht, aber hatte nicht die Zeit :( – jgr208

Antwort

0

Wenn die ausführbare Datei es ermöglicht, die Eingabe zu spamfen, ohne darauf zu warten, dass jede separate Eingabeaufforderung angezeigt wird, können Sie dies möglicherweise mit bash erreichen.

Zum Beispiel wird dieses Skript program_that_takes_several_lines_of_input.py läuft und es vier Zeilen von Eingang senden - drei mit Text und eine Leerzeile:

#!/bin/bash -eux 

./program_that_takes_several_lines_of_input.py <<EOD 
first line 
one enter keypress later 

yet another line of input after the empty line above 
EOD 

Wenn Sie aufhören müssen und wartet jede Eingabeaufforderung angezeigt werden, die stopfen Python-Paket kann für dieses Szenario eine gute Lösung sein - ich finde es nützlich für Aufgaben wie diese, wo Sie nur ein paar Zeilen der Eingabe senden müssen, aber jede Eingabezeile ist unterschiedlich.

See:

https://bitheap.org/cram/

https://pypi.python.org/pypi/cram

erwarten würde auch funktionieren, aber ich finde, dass ich Arbeitslösungen ein bisschen schneller erreichen, wenn stopfen mit als mit erwarten.

pexpect ist auch eine gute Wahl! Siehe:

https://pexpect.readthedocs.org/en/stable/

+0

Die Bash-Lösung funktioniert nicht, aber ich habe es funktioniert mit expect. Ich werde die Antwort unten schreiben. Danke. – dArignac

1

Basierend auf den Vorschlag von bill-agee und jgr208 schrieb ich die folgende, die für mich funktioniert:

#!/usr/bin/expect -f 
set timeout -1 
spawn /tmp/engine.bin 
expect { 
    -gl "*Press SPACE or PAGE DOWN key to continue, U or PAGE UP key to scroll back*" { send -- " "; exp_continue } 
    -gl "*yes/no*" 
} 
send -- "yes\r" 
expect -gl "*press ENTER to accept the default*" 
send -- "/tmp/tce\r" 
expect eof 
Verwandte Themen