【问题标题】:How to use expect to spawn with arguments from command line?如何使用期望从命令行产生参数?
【发布时间】:2020-09-11 22:45:46
【问题描述】:

假设我打电话给my.exp

my.exp cmd a b c d ...

我想将 my.exp 的所有参数传递给 spawn。但我找不到这样做的方法。有没有办法用期望做到这一点?谢谢。

#!/usr/bin/env expect

spawn $argv
...

【问题讨论】:

标签: shell tcl expect


【解决方案1】:

您可能想使用 tcl 的 argument expansion 语法来做到这一点:

spawn {*}$argv

示例

我的.exp:

#!/usr/bin/env expect
log_user 0
puts "Spawning '$argv'"
spawn {*}$argv
expect *foo* { puts "Got: '[string trim $expect_out(buffer)]'" }

用法:

$ ./my.exp echo foo bar
Spawning 'echo foo bar'
Got: 'foo bar'

【讨论】:

  • 正确的路径不可知shebang是#!/usr/bin/env -S expect -f
  • @LéaGris 嗯?没有env 的版本我有一个-S 选项,它们也不为正在运行的命令提供参数(尽管手册页说它们这样做,但它都被视为一个单一的字符串,即命令的名称,所以你得到未找到有关 expect -f 的错误)。
  • (这似乎是有多少操作系统解析shebangs来决定运行什么的限制;在execve(2)中,它们将第一个空格处的行拆分为命令和一个可选参数,即该行的其余部分。)
  • man7.org/linux/man-pages/man1/env.1.html-S, --split-string=S process and split S into separate arguments; used to pass multiple arguments on shebang lines 另见:github.com/coreutils/coreutils/commit/…
  • @LéaGris 不在 Ubuntu 16.04 或 18.04 上。或 NetBSD 9.0 或 OpenBSD 6.7...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 2018-11-07
相关资源
最近更新 更多