我有一个小的期望脚本,我想根据输出发送命令。 这是一个例子
#! /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”并继续使用其余的脚本。
请帮助..
答案 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