expect返回值给shell_linux-如何在shell脚本中通过命令行传递expect参数

linux-如何在shell脚本中通过命令行传递expect参数

我正在外壳脚本中通过命令行在expect中传递参数

我试过了

#!/usr/bin/expect -f

set arg1 [lindex $argv 0]

spawn lockdis -p

expect "password:" {send "$arg1\r"}

expect "password:" {send "$arg1\r"}

expect "$ "

但它不起作用。 请帮我弄清楚。

谢谢

lk121 asked 2020-01-11T21:09:29Z

6个解决方案

77 votes

如果您想读取自变量,则可以通过以下方式轻松实现

set username [lindex $argv 0];

set password [lindex $argv 1];

并打印

send_user "$username $password"

该脚本将打印

$ ./test.exp user1 pass1

user1 pass1

您可以使用调试模式

$ ./test.exp -d user1 pass1

bartimar answered 2020-01-11T21:10:00Z

5 votes

更好的方法可能是这样的:

lassign $argv arg1 arg2 arg3

但是,您的方法也应该起作用。 检查是否已检索到arg1。 例如,使用send_user "arg1: $arg1\n"。

spbnick answered 2020-01-11T21:10:24Z

2 votes

#!/usr/bin/expect

set username [lindex $argv 0]

set password [lindex $argv 1]

log_file -a "/tmp/expect.log"

set timeout 600

spawn /anyscript.sh

expect "username: " { send "$username\r" }

expect "password: " { send "$password\r" }

interact

user128364 answered 2020-01-11T21:10:40Z

1 votes

我喜欢本指南提供的答案。它创建一个解析参数过程。

#process to parse command line arguments into OPTS array

proc parseargs {argc argv} {

global OPTS

foreach {key val} $argv {

switch -exact -- $key {

"-username" { set OPTS(username) $val }

"-password" { set OPTS(password) $val }

}

}

}

parseargs $argc $argv

#print out parsed username and password arguements

puts -nonewline "username: $OPTS(username) password: $OPTS(password)"

上面只是一个片段。 请务必通读本指南并添加足够的用户参数检查,这一点很重要。

Duffmannen answered 2020-01-11T21:11:04Z

-1 votes

注意,有时argv 0是您正在调用的脚本的名称。 因此,如果以这种方式运行,则argv 0不起作用,

我跑“>要求script.exp密码”

使argv 1 =密码argv 0 = script.exp

Sid Dakota answered 2020-01-11T21:11:33Z

-2 votes

带有空格的args很好,假设您想要的arg是脚本名称之后的第一个arg($0是脚本名称,-d是第一个arg,依此类推)

确保使用-d NOT argv,因为它不会包含空格,但将它们分解为单个的args。 在您的expect脚本中执行以下操作:

#!/bin/bash

ARG="$1"

echo WORD FROM BASH IS: "$ARG" #test for debugging

expect -d exp.expect "$ARG"

exit 0

另外,作为第一个答案状态,请使用调试模式(-d标志)当expect看到它们时,它将输出您的argv变量,应向您显示正在发生的情况。

eulerworks answered 2020-01-11T21:12:03Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值