我正在运行一个脚本来获取交换机上的端口信息。我需要获取文件的输出结果,而不是看到相同的命令正在运行。它从文件中读取端口正常。如果我不重定向到文件,我会得到正确的信息;但是当我重定向到一个文件时,我只能看到交换机上运行的相同命令。 lldp-list.txt 是一个包含端口信息的文本文件(以 3 个端口为例)。
可能出什么问题了?我尝试了“tee”和“`”但没有成功。我缺少一些东西
在这一行,它输出的结果很好:
- echo -e“显示 lldp 邻居信息 $ports | inc 机箱描述”
输出:
- 邻居机箱-描述:ArubaOS(型号:205)
- 邻居机箱-描述:ArubaOS(型号:225)
- 邻居机箱-描述:ArubaOS(型号:325)
但是当我重定向时;我在“output.txt”文件中得到以下结果
echo -e "show lldp neighbor-info $ports | inc Chassis-Desc" >> output.txt
show lldp neighbor-info 1/1/1 | inc Chassis-Desc
show lldp neighbor-info 1/1/5 | inc Chassis-Desc
show lldp neighbor-info 1/1/6 | inc Chassis-Desc
这是代码:
while IFS= read -r ports; do
echo -e "show lldp neighbor-info $ports | inc Chassis-Desc" >> output.txt
sleep 2
done < lldp-list.txt
是的;我需要加引号;这是我通过 telnet 会话从交换机执行的命令。如果没有“”,脚本将返回错误。这就是我使用echo -e ...
它的原因,它通过 bash 脚本中的 telnet 会话将该命令行发送到交换机。
作为解决方法,我使用 tee 和 telnet 会话行的末尾:
telnet $MRV_HOST $MRV_PORT | tee output.txt
我必须对输出文件进行更多解析。但我仍然相信应该有办法解决我看到的问题......
答案1
您echo
将命令解释为字符串,然后输出。从您的描述来看,您似乎想运行命令并输出结果。
尝试这个:
while IFS= read -r ports; do
echo -e $(show lldp neighbor-info $ports | inc Chassis-Desc) >> output.txt
sleep 2
done < lldp-list.txt
引号已更改为$()
利用 shell 的命令替换现在应该echo
输出命令的结果而不是命令字符串。
在这种情况下,您实际上并不需要echo
or 命令替换,可以将脚本更改为以下内容:
while IFS= read -r ports; do
show lldp neighbor-info $ports | inc Chassis-Desc >> output.txt
sleep 2
done < lldp-list.txt