2012-04-14 7 views
1

So habe ich drei Installer für NVIDIAs CUDA API - der erste ist ein Treiber und kommt mit netten stillen Installation Flag-Optionen (aber Sie müssen root sein und Run Level haben 3).Formatieren Expect Skript innerhalb des Benutzerbefehls im Bash Skript

Die zweite zwei Folge manuell unten Installation (ausgeschnitten, die lange Durcheinander installieren danach der Kürze halber)

[root] # sh cudatoolkit_4.1.28_linux_64_rhel5.x.run Archiv Überprüfen Integrität .. . Alles gut. Dekomprimieren von NVIDIA CUDA .............................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ............................................... .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ..........................................
Installationspfad eingeben (Standard/usr/local/cuda, '/ cuda' wird angehängt):
Eine frühere Version von CUDA wurde in/usr/local/cuda/bin gefunden
Möchten Sie deinstallieren? (Ja/nein/Abbruch): ja

Mit anderen Worten, ich muss erkennen: „Pfad installieren Enter“ und geben ein ‚\ n‘

Jetzt kommt der schwierige Teil ist die Deinstallation kann nicht sei immer da. Wenn es nicht ist, muss ich einfach warten, bis die Installation abgeschlossen ist, aber wenn ich sehe "Möchten Sie deinstallieren?" Ich muss "Ja" ausgeben, um abzuschließen.

Die dritte und letzte Installateurs Ausgabe ist unten dargestellt ....

[root] # sh gpucomputingsdk_4.1.28_linux.run
Überprüfen Archiv Integrität ... Alles war gut.
Dekomprimieren von NVIDIA GPU Computing

SDK ......................................... .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ...

Geben Sie den Installationspfad ein (Standard ~/NVIDIA_GPU_Computing_SDK): /usr/local/CUDA_SDK

Befindet sich CUDA unter/usr/local/cuda
Wenn dies korrekt ist, wählen Sie den Standard unten.
Wenn es nicht korrekt ist, geben Sie den richtigen Pfad zu CUDA

eingeben CUDA Pfad (default/usr/local/CUDA) installieren:

Für diese gibt es keine Deinstallation Aktion, so dass es scheinbar ist ein bisschen einfacher.

Ich muss nur erkennen „Pfad installieren Enter“ und Ausgang „/ usr/local/CUDA_SDK \ n“ und dann erkennen „Enter CUDA Pfad installieren“ und Ausgang „\ n“

Meine Idee zu verwenden war ein Paar von Expect-Skripten - eines für jedes Installationsprogramm - aber aufgrund der Verschachtelung innerhalb der doppelten Anführungszeichen des Befehls, um zu root zu wechseln, habe ich einige Schwierigkeiten damit.Was ich zur Zeit haben, ist:

#!/bin/bash 
CR="\"\n\"" 
YES="\"Yes\"" 
INSTALL_PATH_REQUEST="\"Enter install path\"" 
CUDA_PATH_REQUEST="\"Enter CUDA install path\"" 
UNINSTALL_REQUEST="\"Would you like to uninstall?\"" 
TOOLKIT=`ls -t cudatoolkit* | head -n 1` 
TOOLKIT_EXPECT="sh $TOOLKIT" 
SDK=`ls -t gpucomputingsdk* | head -n 1` 
SDK_INSTALL_PATH="\"/usr/local/CUDA_SDK\n\"" 
SDK_EXPECT="sh $SDK" 
/bin/su root -c "yum -q -y install expect expectk; 
/sbin/init 3; sh `ls -t NVIDIA*|head -n 1` -s --update -a -X; 
/usr/bin/expect <<EOF; 
spawn $TOOLKIT_EXPECT 
expect $INSTALL_PATH_REQUEST 
send $CR 
expect $UNINSTALL_REQUEST 
send $YES 
EOF 
/usr/bin/expect <<EOF; 
spawn $SDK_EXPECT 
expect $INSTALL_PATH_REQUEST 
send $SDK_INSTALL_PATH 
expect $CUDA_PATH_REQUEST 
send $CR 
EOF 
/sbin/init 5" 

Diese richtig zu verankern Schalter (sobald das Passwort eingegeben wird) und installiert die Treiber mit dem korrekt in Optionen gebaut. Es scheint dann, den zweiten Installationsvorgang zu erzeugen und das erste Argument (einen Zeilenumbruch) einzugeben, scheint aber das zweite Installationsprogramm vorzeitig zu beenden (z. B. sehe ich die Option "ja" nicht).

Ich habe das Gefühl, dass ich ziemlich nah dran bin, hoffentlich kann mir jemand zeigen, wo ich falsch liege und die richtige Syntax vorschlage.

NOTES: Ich fügte hinzu, die yum Befehl installieren, da einige der Maschinen Ich bin die Installation hatte nicht erwartet hat (Lager CentOS 6), so dass ich die es Ärger erspart ....

+0

Bitte nicht Multi-Post - http://superuser.com/q/412259/4714 –

Antwort

3

Möglicherweise ein Problem mit Timeout hier ... nicht sicher, wie lange der Installer dauert.
Der Standard erwarten Timeout 10 Sekunden ist, wenn es nicht den erwarteten Text in dieser Zeit sieht, wird es weitergehen, unabhängig, können Sie die Timeout-Werte wie so ändern könnte:

expect -timeout 100 $INSTALL_PATH_REQUEST 

Auch Ihre $ JA ändern aus

YES="\"Yes\"" 

an:

YES="\"Yes\r\"" 

(Beste \ r statt \ n in $ CR zu verwenden)

Es ist auch eine gute Idee, einig ‚Sicherheitskette‘ am Ende der Installation zum Beispiel zu erwarten:

expect -timeout 320 "Install Complete." 

Also das erwartet Skript nicht beenden, bevor der erzeugte Prozess abgeschlossen ist.

+0

Vielen Dank, werde dies ausprobieren und zurück zu Ihnen, wie es gelaufen ist! –

+0

dies versucht, mit @glenn jackman Lösung kombiniert hier: http://superuser.com/questions/412259/expect-script-inside-bash-script-optional-statement Was am Ende passiert ist, bekomme ich einen Fehler 'ungültiger Befehlsname"/usr/bin/expect "während der Ausführung ..." ' Wie du vermutest, halfen die Timeouts und' 'r's, aber ich habe immer noch Probleme mit dem bedingten Teil brauche einen weiteren EOF nach der schließenden Klammer nach dem ersten (und einzigen) EOF in glenn jackmans Lösung? –

+0

WOOO! Sobald ich hinzugefügt habe, dass EOF zurück in allem funktioniert wie ein Charme. Ihr Timeout-Proofing kombiniert mit Glenn Jackman's Fix auf die bedingte Logik erwarten das Skript funktioniert perfekt .... Unbeabsichtigte CUDA Installation funktioniert perfekt :) Yay Teamwork! Hier ist Jackmans Beitrag: http://superuser.com/questions/412259/expect-script-inside-bash-script-optional-statement –