正しいパイプの使い方

正しいパイプの使い方

私は現在やっています:

cat file1 file2 | sort -k1,1 > temp_file
command [options] -i temp_file > result_file

-i はコマンド入力を指定します。この場合、temp_fileを明示的に指定せずにこれを実行する方法が必要です。

cat file1 file2 | sort -k1,1 | command [options] -i > result_file失敗し、-iの後にファイルがないと文句を言います。

私も試しましたパラメータただし、これはファイルではなくコンテンツの各行で実行されます。

ベストアンサー1

一部のアプリケーションでは、-stdinが何を意味するのかを理解しています(マンページの確認)。

sort... | cmd -i - > result.txt

ほとんどのシステムには、オープン時にstdinをコピーするかのように動作する特別な/dev/stdinファイル(と同じ)があるため、次のようになります。/dev/fd/0

sort... | cmd -i /dev/stdin > result.txt

一部のシェル(ksh、zsh、bash)を使用して以下を作成することもできます。

cmd -i <(sort...) > result.txt

これが動作している間、ファイルはパイプなのでパイプではありません。閲覧可能。一部のファイルはcmd検索可能ファイルまたは一般ファイルを必要とする可能性があり、ファイルがパイプの場合は失敗します。まあ、一時ファイルを使用するしかありません。

これにより、次のフォームをzsh使用できます。=(...)プロセスの交換:

cmd -i =(sort ...) > result.txt

zsh一時ファイルを自動的に作成、塗りつぶし、整理するために使用されます。

と同じfish、使用psub:

cmd -i (sort... | psub -f) > result.txt

の場合はbashまだ/dev/fd/xファイルを使用していますが、今回は通常の一時ファイルでより安定したクリーンアップのため開いた直後に削除されました。

tmp=$(mktemp) && {
  rm -f -- "$file" &&
    sort... >&3 3>&- 4<&- &&
    cmd -i /dev/fd/4 3>&-
} 3> "$tmp" 4< "$tmp"

おすすめ記事