如何在Bash脚本中向独立Expect文件传递变量?
把Bash变量传递给独立Expect脚本的几种方法
我懂你现在的需求——要把Bash脚本里的$a和$b传给单独的Expect文件,对吧?这里有两种简单可行的方法,你可以根据情况选:
方法1:通过命令行参数传递
这是最直接的方式,调用Expect脚本时把变量作为参数传过去,然后在Expect里读取argv列表就行。
修改你的Bash脚本:
#!/bin/bash a="Neil" b="Thunel" # 把a和b作为参数传给Expect脚本 expect ./test01.exp "$a" "$b" if [ $? == 0 ]; then echo "success!" else echo "fail!" fi
修改你的Expect脚本(test01.exp):
#!/usr/bin/expect # 从命令行参数里获取变量 set a [lindex $argv 0] set b [lindex $argv 1] # 现在就可以用这些变量了,比如打印出来 send "echo 'Hello $a $b' \n" exit 0
lindex $argv n里的n是参数的索引,从0开始,第一个参数对应0,第二个对应1,以此类推。
方法2:通过环境变量传递
如果不想把变量暴露在命令行里(比如敏感信息),或者变量数量比较多,用环境变量更合适。
修改你的Bash脚本:
#!/bin/bash a="Neil" b="Thunel" # 先把变量导出为环境变量 export a b # 再调用Expect脚本 expect ./test01.exp if [ $? == 0 ]; then echo "success!" else echo "fail!" fi
修改你的Expect脚本(test01.exp):
#!/usr/bin/expect # 从环境变量里读取值 set a $env(a) set b $env(b) send "echo 'Hello $a $b' \n" exit 0
Expect里用$env(变量名)就能直接获取Bash导出的环境变量。
两种方法都能解决你的问题,挑顺手的用就行~
内容的提问来源于stack exchange,提问作者aircraft
相关产品推荐
相关产品推荐

