我有一个简单的 BASH 脚本,用于将.esh
脚本发送到远程主机。例如,我知道主机的用户名和密码是什么,所以我的脚本执行以下操作:
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 列表的文本文件循环访问多个远程主机。
谢谢!