STDINからファイルをインポートし、すべてのファイルに対して一度にいくつかのタスクを実行するスクリプト

STDINからファイルをインポートし、すべてのファイルに対して一度にいくつかのタスクを実行するスクリプト

私はしばしば結果ファイルfindfd次のようなものを編集したいと思います。

fd myfile | my_script

私のスクリプトでは、vimSTDINのすべてのファイルがパラメータとして実行されます(例:)vim "myfile1" "myfile2"。これらのパラメータにはスペースやその他の特殊文字を含めることができるため、個別に二重引用符で囲む必要があります。

私は以下を試しました:

files=""
while IFS=$'\n' read -r line; do
    files="$files $line"
done

file $files

例は、file結果ファイル名を引数として使用して実行する必要があります。ファイル名の空白が原因で問題が発生したことを除いて、やや機能し、さまざまな方法で変数を参照しようとしましたが、成功しませんでした。

改行で区切られた入力を空白の引数として使用してコマンドを実行するには?

答え1

すでに述べたように、bashこの配列を使用してください。

files=()
while IFS=$'\n' read -r line; do
    files+=( "$line" )
done

file "${files[@]}"

xargs改行区切り文字を使用して、動作が似ている必要があるかどうかを確認することもできます。

関連情報