如何在expect脚本

时间:2017-06-24 18:13:03

标签: bash expect

我有一个小的期望脚本,我想根据输出发送命令。 这是一个例子

#! /usr/bin/expect
spawn ssh root@hostname
expect "Password:"
send "12345\r"
expect "root@host:#"
send "ls -lrt"  # depend on this output I need delete file

从这里,如果我有文件列表a,b,c,d 我想发送“rm a”,但每次运行脚本时文件名都会改变。 我不知道脚本如何等待我输入命令,我也不想每次都输入rm命令。我只想输入文件名。(这是一个例子,真正的命令很长,我不想每次都输入相同的长命令。) 所以我想要的是脚本等到我只放入文件名,然后输入文件名后,它会发送“rm filename”并继续使用其余的脚本。

请帮助..

2 个答案:

答案 0 :(得分:0)

这根本不需要是互动的。我假设您的要求是删除最旧的文件。这样做:

ssh root@hostname 'stat -c "%Y:%n" * | sort -t: -k1,1n | head -1 | cut -d: -f2- | xargs echo rm'
# .. remove the "echo" if you're satisfied it finds the right file .................... ^^^^

答案 1 :(得分:0)

使用expect_user

#!/usr/bin/expect
spawn ssh root@hostname
expect "Password:"
send "12345\r"
expect "root@host:#"
send "ls -lrt"  # depend on this output I need delete file

expect_user -re "(.*)\n" {
    set filename $expect_out(1,string)
    send "ls -al $filename\r"    ;#// Substitute with desired command
}

expect eof