![](/img/trans.png)
[英]Use Expect in a Bash script to provide a password to an SSH command
[英]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.