私はbashスクリプトと呼ぶことができるものを整理しようとしています(私のbashスクリプトの能力が誇るものではありません)。私が望むのは、テキストファイル(内容が定期的に変更されるテキストファイル)の1行を、私が呼び出すプログラム(imagemagick)に供給することです。これまでは機能しますが、テキストファイルに単一の単語または一連の数字しかない場合にのみ可能です。ループを使用しようとしていますが、for
ループによってスペースが改行文字として扱われるためだと思います。したがって、プログラムに1行のテキストを提供するのではなく、ファイルの内容が一連の単語または数字を超えると、一度に1行ずつ提供されるように見えます。結局、結果にマージされます。私が望むものではありません。
説明して理解する方が簡単だと思うので、echoを使って例を挙げましょう。というテキストファイルがありますmyfile.txt
。このファイルには、複数の単語と数字のシーケンスを含む行が含まれています。次のように見えます。
'Sep 09, 2016 - 01:00 PM EDT\nconditions: mostly cloudy\n34 F\nHumidity: 39%'
一重引用符は、私がこの資料を提供するプログラムがそれを完全に処理し、スペースを無視するようにする必要があります。 \nビットは私が入力するプログラムに必要であり、改行インジケータとして機能します。そのため、次のfor
ようにループとエコーコマンドでこの例を使用してください。
for i in `cat myfile.txt`; do echo $i; done
出力を生成しません
'Sep 09, 2016 - 01:00 PM EDT\nconditions: mostly cloudy\n34 F\nHumidity: 39%'
しかし、
'Sep
09,
2016
-
01:00
PM
EDT\nconditions:
mostly
cloudy\n34
F\nHumidity:
39%'
私が読んだところによると、catを呼び出すループを使用することは私が望むものを達成する良い方法ではないようです。そしてループは、内容がすべて一緒ではなく複数行にわたって広がる理由である可能性が高いです。 。それでは、これらすべての単語と整数グループが同じ行にあるようにこれを行う方法を提案できる人はいますか?
PS:私が作成したいスクリプトは#!/bin/bash
一連のコマンドで始まり、設定されます。ほとんどのコンテンツが削除され、名前が変更されたテキストファイルをダウンロードしますmyfile.txt
。その後、天気マップをダウンロードし、これにいくつかのタスク(主に切り捨て)を実行します。アイデアは、imagemagickを使用して一部のテキストを対応する地図/画像に並置することです。実際、複数の単語やスペースで区切られた整数のシーケンスを含めようとしない限り、これはすでに機能します。テキストファイルに単一の単語または整数のシーケンス以上がある場合、最後の単語または整数のシーケンスのみが画像にリンクされます。
答え1
Imagemagickを使っていくつかのテキストをレンダリングしようとしているようです。それではなぜ言わないのですか?
convert -background lightblue -fill blue -font Helvetica -size 160x label:"$(<input.txt)" output.gif
input.txt
レンダリングしたいファイルはどこにありますか?
答え2
while read -r things; do
printf "%s\n" "$things"
done <myfile.txt
書いていることがわかったら、中止してaにfor i in $( cat ...
変更し、while read -r i
そこにデータを入力してくださいdone
。ループだけのためにファイル全体の内容を読み取る理由はなく、場合によっては(ビッグデータ)これは多くの問題を引き起こす可能性があります。
バックスラッシュが正しく処理されるように-r
フラグを指定します。read
read
私もprintf
代わりに使用していますecho
。なぜですか?ねえ。
私も私の変数を引用しました。なぜ?ねえ。