stdinをwhileループにあいまいにリダイレクトする[閉じる]

stdinをwhileループにあいまいにリダイレクトする[閉じる]

ファイル列の各エントリに対してコマンドを実行したいと思います。現在、次のことを行っていますが、あいまいなリダイレクトエラーが発生します。

while read -r entry;
do
  cmd "$entry" ;
done < $(cut -f2 file.tsv)

私も試しました

done <(cut -f2 file.tsv)

予期しないトークン構文エラーが発生します。

これを行う正しい構文は何ですか?


入力例

タブで区切られた値は、目的の列のファイルパスを持つファイルです。

1    file1.txt    ...
2    file2.txt    ...
3    file3.txt    ...

予想される結果

スクリプトは次のコマンドを実行する必要があります。

cmd file1.txt
cmd file2.txt
cmd file3.txt

簡単な例を目的としてエラーがないため、catasを使用できます。cmdcmd それ自体しかし、入力リダイレクトがあります。

私が実行した実際の命令は生物情報学ツールでした。カリスト、具体的にkallisto quant

ベストアンサー1

これが正しいアプローチのようです。

while read -r entry;
do
  cmd "$entry" ;
done < <(cut -f2 file.tsv)

~によるとこのbashリダイレクトチートシート、この構文はの出力をcut -f2 file.tsv匿名fifoに渡し、それをstdinに渡します。

おすすめ記事