繁体   English   中英

bash脚本中的Expect命令

[英]Expect command in bash script

我在执行带有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

您可以像'"$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"'

如果仅删除$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"

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

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可能存在问题?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM