curl を使用してプレーンテキスト ファイルを取得し、それを変数に割り当てる単純なスクリプトがあります。後でそれをエコーし、いくつかの行をgrepして一時ファイルに入れます(実際にはそれらを配列に入れたいです)。次に、それらを繰り返し処理して何かを行います。Mac OS X の 1 台のマシンで実行しましたが、ほとんど動作します。ただし、次のいずれかがランダムに発生します。
- curl の出力は 1 行として扱われるため、echo/grep の段階で問題が発生します。
- echo と for ループを実行すると、tmp ファイル全体が単一行として扱われるため (「読み取り行」を使用してこれを軽減したようです)、再び壊れます。
改行が一貫して確実に処理されるようにする方法はありますか? 常に同じである限り、私は気にしません。必要に応じて、1 行の curl 出力から結果を sed することもできます。
更新:別の場所から。マシンにログオンし、いくつかのことを行い、スクリプトが機能しないことに気付きました。いくつかのコマンド (結果、要約、以下) を実行してテストし、ログオフし、再度ログオンし、動作が変更されました (期待されるものに戻りました)。forループ出力の違いに注意してください...同じコマンドが(私が知っている限り)まったく同じenvで、改行が異なる場合のcurl出力でも同じことが起こります。私がやりたいことは、すべてのスクリプトの最初に何らかのコマンドを実行して、動作が決して変わらないことを 100% 確実にすることです。
[root@ip-xxx-xxx-xxx-xxx ~]# cat example.txt
ip-xxx-xxx-xxx-xxx.ec2.internal
ip-xxx-xxx-xxx-xxx.ec2.internal
[root@ip-xxx-xxx-xxx-xxx ~]# for f in `cat example.txt`; do echo "line $f"; done
line ip-xxx-xxx-xxx-xxx.ec2.internal
ip-xxx-xxx-xxx-xxx.ec2.internal
[root@ip-xxx-xxx-xxx-xxx ~]# while read f; do echo "line $f"; done < "example.txt"
line ip-xxx-xxx-xxx-xxx.ec2.internal
line ip-xxx-xxx-xxx-xxx.ec2.internal
[root@ip-xxx-xxx-xxx-xxx ~]# logout
Connection to ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com closed.
reznor-mbp:trunk2 sergey$ ssh -i ... "root@..."
Last login: ...
[root@ip-xxx-xxx-xxx-xxx ~]# for f in `cat example.txt`; do echo "line $f"; done
line ip-xxx-xxx-xxx-xxx.ec2.internal
line ip-xxx-xxx-xxx-xxx.ec2.internal