ファイルを引数として受け取り、ファイルが存在することを確認し、stdinからインポートされたすべての内容をファイルに書き込むbash関数があります。この単純な解決策はテキストには機能しますが、任意のバイナリデータには問題があります。
echo -n '' >| "$file" #Truncate the file
while read lines
do # Is there a better way to do this? I would like one...
echo $lines >> "$file"
done
ベストアンサー1
$IFS
あなたのアプローチは、読み取りを分割するために使用される区切り文字()のスペースに書き込むすべての項目に改行を追加することです。改行に分けるのではなく、全体を渡してください。上記のコード全体を次のように単純化できます。
cat - > $file
切り捨てビットは必要ありません。これにより、STDIN ストリーム全体が切り捨てられ、ここに書き込まれます。
編集する:zshを使用している場合は、> $file
代わりにcatを使用できます。ファイルにリダイレクトして切り捨てますが、STDINを受け入れるのを待つものがあれば、その時点で読み込まれます。私の考えでは、bashを使ってこれを行うことができますが、いくつかの特別なモードを設定する必要があります。