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

如何为expect -c脚本传递参数并保持标准输入打开?

解决Expect临时脚本参数传递与stdin保持打开的问题

错误原因

你遇到的can't read "argv": no such variable错误,核心原因有两点:

  1. 部分环境下Expect的-c模式中,$argv变量的引用需要适配语法,或是你的Expect版本不支持{*}这种Tcl 8.5+才有的列表展开特性。
  2. 原命令缺少维持stdin打开的关键指令,即便参数传递正常,进程执行后也会直接退出,无法保持stdin连接。

正确执行方式

方式1:兼容旧版本Expect(用eval展开参数)

如果你的Expect版本较低,不支持{*}语法,可使用eval解析并执行参数列表:

expect -c 'eval spawn $argv; interact' -- echo hello world

方式2:支持Tcl 8.5+版本(用{*}展开)

若环境支持Tcl 8.5及以上,直接用{*}展开参数列表,写法更简洁:

expect -c 'spawn {*}$argv; interact' -- echo hello world

关键说明

  • --:用于分隔Expect自身选项和要执行的命令参数,避免命令中带-开头的参数被误判为Expect的选项。
  • interact:这是保持stdin打开的核心指令,它会将当前终端的stdin/stdout绑定到spawn启动的进程,实现交互式输入输出,维持stdin连接。
  • 原命令中的/dev/null是多余的,无需添加,interact已能满足stdin保持打开的需求。

内容的提问来源于stack exchange,提问作者KamilCuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:34:59