.esh
リモート ホストにスクリプトを送信する単純な BASH スクリプトを使用しています。たとえば、ホストのユーザー名とパスワードがわかっているので、スクリプトは次のことを行います。
expect login:
send root\n
expect Password:
send abc123\n
expect "# "
root
したがって、これにより、パスワードを使用してユーザーとしてリモートホストに自動的にログインしますabc123
。
現在、BASH スタイルの 1 行の 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 のリストを含むテキスト ファイルを介して複数のリモート ホストをループできるようになりました。
ありがとう!