シェルスクリプトからバイナリファイルのデータを読み取った後、バイナリファイルにデータを書きますか?

シェルスクリプトからバイナリファイルのデータを読み取った後、バイナリファイルにデータを書きますか?

誰かがバイナリファイルからいくつかのデータを読み取って、そのデータをシェルスクリプトなどの新しいバイナリファイルに書き込む方法を教えてください。私はLinuxを使用しています。

注:cat file1 > file2データ全体を記録するので、必要ありません。

要件:一部のデータを読み書きし、再読み書きします。

while read -n1 ch
do
   
    cat $ch > $output   # Tried this, showing error. While writing the data after reading, cat command throws error : No such file or directory.
        
done < $filename

答え1

cat制御に使用されるコマンドです。拡張により、enate ファイルは単一ファイルの内容を標準出力に印刷するためにも使用されます。それcatがすることは、標準入力ストリームに入力されたファイルや何でもインポートして印刷するだけです。他の言語の文と同様に、引数を印刷しませんechoprintこれは目的ではありません。

したがって、ここで作業に誤ったツールを使用しています。echo最後に改行を追加して(通常はデフォルト)、何を入力しても印刷したいです。またはより良い、より安全特にバイナリデータの場合は、次のようにprintfなります。

while read -r -n1 ch
do
    printf '%s\n' "$ch" >> "$output"
done < "$filename"

バックスラッシュをエスケープ文字として解釈しないように指示します-r。なぜなら、それ以降を使用すると、各反復で上書きされ、読み取った最後の文字と変数の周りの引用符だけが表示されるためです。read>>>>$outputシェルの分割+グローブ拡張から保護します。

関連情報