2017-06-03 7 views
-1

Wenn ich versuche, eine Variable in einer expect-Bedingung zu verwenden, stellt sich heraus, dass sie nicht funktioniert.Wie führe ich den Befehl in der expect-Bedingung aus?

Ergebnis:

[email protected]:~/bin$ ./expectinstall.sh iotop 
spawn sudo apt-get install iotop 
[sudo] password for qianyu: 

mein Skript unter:

#!/usr/bin/expect -f 

set timeout -1 
set password qianyu 
set app [lindex $argv 0] 
set username `whoami` 

spawn sudo apt-get install $app 
expect { 
"*password for ${username}*" { send "${password}\r" } 
} 
expect eof 

--update--

Ich finde das Problem meines Skript wird der Benutzername nicht bekommen, aber die Einstellung der Benutzernamen per Befehl in `...`. Ich habe es in [exec ...] geändert, und es funktioniert gut.

korrigiert Skript:

#!/usr/bin/expect -f 

set timeout -1 
set password qianyu 
set app [lindex $argv 0] 
set username [exec whoami] 

spawn sudo apt-get install -y $app 
expect { 
"*password for ${username}*" { send "${password}\r"; } 
} 
expect eof 
+1

Siehe auch: [Wie Variablen Bash-Skript verwenden, in bedingten Anweisungen erwarten] (https://stackoverflow.com/q/11131318/3776858) – Cyrus

+0

@Cyrus, ich fand keine Ahnung von der Antwort, bevor ich diese Frage posten. –

+0

Mögliches Duplikat von [Zugriff auf Umgebungsvariablen in einem Expect-Skript?] (Https://stackoverflow.com/questions/12695474/how-to-access-environment-variables-in-an- expect- script) – mihir6692

Antwort

0

Präfix es mit $env(...)
Als Beispiel $HOME zu verwenden, tun dies
$env(HOME)

Verwandte Themen