You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:02:36