echo -e は bash からファイルにリダイレクトすると、ファイルの結果を正しく出力しません。

echo -e は bash からファイルにリダイレクトすると、ファイルの結果を正しく出力しません。

スイッチのポート情報を取得するスクリプトを実行しています。同じコマンドが実行されるのを見るのではなく、ファイルの出力を取得する必要があります。ファイルからポートをよく読みます。ファイルにリダイレクトしないと正しい情報が得られますが、ファイルにリダイレクトするとスイッチで実行されているのと同じコマンドだけが表示されます。 lldp-list.txtは、ポート情報(3つのポートなど)を含むテキストファイルです。

何が間違っている可能性がありますか?私は「ティー」と「」を試しましたが、成功しませんでした。何か落ちた

この行では正常に出力されます。

  • 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

$()シェルの利点を活用するために引用符が変更されました。コマンドの置き換えこれで、echoコマンド文字列の代わりにコマンド結果が出力されます。

この場合、実際には、またはコマンドの置換は必要ありません。echoスクリプトを次のように変更できます。

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

おすすめ記事