Bashパイプラインで生のバイナリデータを処理する方法は?

Bashパイプラインで生のバイナリデータを処理する方法は?

ファイルを引数として受け取り、ファイルが存在することを確認し、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を使ってこれを行うことができますが、いくつかの特別なモードを設定する必要があります。

おすすめ記事