当重定向到 bash 中的文件时,echo -e 未正确输出文件中的结果

当重定向到 bash 中的文件时,echo -e 未正确输出文件中的结果

我正在运行一个脚本来获取交换机上的端口信息。我需要获取文件的输出结果,而不是看到相同的命令正在运行。它从文件中读取端口正常。如果我不重定向到文件,我会得到正确的信息;但是当我重定向到一个文件时,我只能看到交换机上运行的相同命令。 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输出命令的结果而不是命令字符串。

在这种情况下,您实际上并不需要echoor 命令替换,可以将脚本更改为以下内容:

while IFS= read -r ports; do
show lldp neighbor-info $ports | inc Chassis-Desc >> output.txt
sleep 2
done < lldp-list.txt

相关内容