1
我有一个简单的BASH脚本,我用它发送一个.esh
脚本到远程主机。例如,我知道用户名和密码是主机,所以我的脚本执行以下操作:Telnet /发送/期望 - 从远程主机自动拉日志
expect login:
send root\n
expect Password:
send abc123\n
expect "# "
所以,这将自动登录我到远程主机的用户root
与密码abc123
。
我现在试图发送一个bash风格的单行for循环,从一些日志文件拉动主机上的一些指标,即:
send 'for i in /var/log/example/*.txt; do echo $i; cat $i | grep error ; done \n'
然而,这种失败:
# can't read "i": no such variable
while executing
send 'for i in /var/log/example/*.txt; do echo $i; cat $i | grep error ; done \n'
我读过一些类似的帖子,但我还没有发现任何类似的情况。一旦我想出了如何实现这一点,我可能会包含更多的命令行命令来优化日志文件的输出(即:更多bash临时变量,通过awk
管道输出等)。
任何人都可以帮我解决这个问题吗?
谢谢。
编辑:按照所提供的答案,我改变了我的脚本为以下,和它的工作就像一个魅力:
expect login:
send root\n
expect Password:
send abc123\n
expect "# "
send { for i in /var/log/example/*.txt; do echo $i; cat $i | grep error ; done }
send "\n"
send exit
此登录到远程主机,打印出一些有价值的指标到控制台,然后退出telnet。我现在可以在本地主机上使用bash脚本,通过包含主机名/ IP列表的文本文件循环访问多个远程主机。
谢谢!
从技术上讲,你应该用'\ r'而不是'\ n'发送 - '\ r'是回车,即.e. “打入” –