如何在期望条件语句中执行命令

问题描述:

当我尝试在期望条件语句中使用变量时,事实证明它不起作用。如何在期望条件语句中执行命令

结果:

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

我的脚本如下:

#!/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--

我找到我的剧本的问题是没有得到的用户名,但设置的用户名通过`...`的命令。我将其更改为[exec ...],并且运行良好。

修正后的脚本:

#!/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

参见:如何指望条件语句中使用bash脚本变量] (https://*.com/q/11131318/3776858) – Cyrus

+0

@Cyrus,我没有找到任何线索从我回答这个问题之前的答案。 –

+0

[如何访问Expect脚本中的环境变量?](https://*.com/questions/12695474/how-to-access-environment-variables-in-an-expect-script)可能的重复 – mihir6692

$env(...)
作为一个例子,前缀它使用$HOME,做到这一点
$env(HOME)