两个命令或命令管道命令 - Spawn Expect

时间:2017-01-18 15:46:37

标签: linux bash shell ssh expect

我正在尝试将一个expect脚本执行到bash脚本中,但是当我尝试执行没有“| tee -a xxx.log”的shell时(其中xxx.log是一个文件,而不是我想写的来记录ssh会话) )。

此代码可以正常工作:

comlog="ssh $USR@192.168.228.20"
expect -c"
    spawn \"$comlog\"
    expect \"Password:\"
    send \"$PASS\r\"
    interact
"

但是当我尝试添加“tee -a”命令来保存ssh会话时,问题是

invalid command name "ssh"
while executing

这是我获取错误消息的完整命令

 comlog="ssh $USR@192.168.228.20 | tee -a /home/xxx.log"
 expect -c"
    spawn \"$comlog\"
    expect \"Password:\"
    send \"$PASS\r\" #Already Obteined
    interact
 "

我试图以这种方式更改“comlog”var但不起作用:(

 cssh $USR@192.168.228.20 \| tee -a /home/xxx.log

有没有人知道另一种方法来保存从期望开始的ssh会话?或者我如何在同一个spawn命令中发送这两个命令。

2 个答案:

答案 0 :(得分:0)

如果要将shell元字符放置为管道,则必须生成一个shell来处理它们。使用here-doc也可以帮助引用

comlog="ssh $USR@192.168.228.20 | tee -a /home/xxx.log"
expect <<"END_EXPECT"
spawn sh -c "$comlog"
... rest of expect script
END_EXPECT

答案 1 :(得分:0)

您可以通过以下方式捕获期望会话输出:

 comlog="ssh $USR@192.168.228.20"
 expect -c"
    spawn \"$comlog\"
    expect \"Password:\"
    send \"$PASS\r\" #Already Obteined
    interact
 " >/home/xxx.log