Linux bash脚本中的Expect命令

Linux bash脚本中的Expect命令,linux,bash,shell,ssh,expect,Linux,Bash,Shell,Ssh,Expect,使用bash变量执行expect命令时遇到问题。我有脚本的参数给出的位置,我需要通过expect-c在send命令中使用它。但我需要用“所以实际上send命令认为我已经结束了键入,并且在结束引号后将命令的其余部分识别为额外字符。事情如下所示: #!/bin/bash SIGN=ppp expect -cd 'spawn ssh user@host expect "Password:" send -- "pass\r" e

使用bash变量执行expect命令时遇到问题。我有脚本的参数给出的位置,我需要通过expect-c在send命令中使用它。但我需要用“所以实际上send命令认为我已经结束了键入,并且在结束引号后将命令的其余部分识别为额外字符。事情如下所示:

#!/bin/bash

SIGN=ppp

expect -cd 'spawn ssh user@host
            expect "Password:"
            send -- "pass\r"
            expect "*~>"
            send -- "find /local/"$SIGN"/ -maxdepth 1 -type d -mtime +30 |xargs rm -rfv\r"
            expect "*~>"
            send -- "exit\r"'

你知道如何在没有双引号的情况下将变量从bash发送到expect吗?顺便说一句,我不能使用ssh的键

如果简单地删除“s around
$符号
,会发生什么

send--“find/local/$SIGN/-maxdepth 1-类型d-mtime+30 | xargs rm-rfv\r”

或者尝试在其周围使用{}


send--“find/local/${SIGN}/-maxdepth 1-type d-mtime+30 | xargs rm-rfv\r”

您可以像那样转义
“$SIGN”

例:


您可以将该变量放入环境中:

export SIGN=ppp

expect -cd '
    spawn ssh user@host
    expect "Password:"
    send -- "pass\r"
    expect "*~>"
    send -- "find /local/$env(SIGN)/ -maxdepth 1 -type d -mtime +30 |xargs rm -rfv\r"
    # ...................^^^^^^^^^^
    expect "*~>"
    send -- "exit\r"
'

我又遇到了一个问题:send--“find/local/”“$SIGN”/-maxdepth 1-type d-mtime+30“grep-v'$FILTER”“| xargs rm-rfv\r”此命令未执行。至少它正确地放置了变量值。但通过xargs向rm发送文件夹列表可能会有问题?

若并没有它,它不会将其视为变量:无法读取“符号”:并没有这样的变量。{}怪异也是如此。我想这是因为它在第一行的
'
内。可以将它们作为一些expect命令发送吗。每行一个,跳过一个?我相信有更好的方法,但那是我想开始的地方,我实际上不明白。一些expect命令?它不会中断ssh会话吗?你能给我一个提示吗?:)实际上我对expect一点也不熟悉我也不熟悉expect。我只是在看bash语法。我认为问题在于使用单引号来包含整个字符串。看看这个链接。不确定答案是什么,但我认为如果
export SIGN=ppp

expect -cd '
    spawn ssh user@host
    expect "Password:"
    send -- "pass\r"
    expect "*~>"
    send -- "find /local/$env(SIGN)/ -maxdepth 1 -type d -mtime +30 |xargs rm -rfv\r"
    # ...................^^^^^^^^^^
    expect "*~>"
    send -- "exit\r"
'