在bash脚本中预期命令

时间:2014-06-20 12:33:27

标签: linux bash shell ssh expect

我遇到了使用bash变量执行expect命令的问题。我有脚本参数给出的位置,我需要通过expect -c在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中的变量发送到没有双引号的期望吗?顺便说一句 - 我不能使用键ssh

4 个答案:

答案 0 :(得分:1)

您可以像'"$SIGN"'一样逃避:

例如:

#!/bin/bash

SIGN=ppp

expect  -c 'spawn ssh tiago@localhost
            expect "password:"
            send -- "mypass\r"
            expect "~"
            send -- "echo '"$SIGN"'\r"
            expect "^ppp"
            send -- "exit\r"'

答案 1 :(得分:0)

如果您只是删除$SIGN周围的"会发生什么?

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

或者尝试围绕它使用{}。

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

答案 2 :(得分:0)

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

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"
'

答案 3 :(得分:0)

我还面临一个问题:发送 - "查找/本地/'" $ SIGN"' / -maxdepth 1-type d -mtime +30 | grep -v'" $ FILTER"' | xargs rm -rfv \ r"此命令未执行。至少它正确地放置了变量值。但是可能有问题是通过xargs将文件夹列表发送给rm?