誰かがこのコマンドが機能する理由を説明できますか?
gpg --enable-special-filenames --verify --batch \
<(curl -s https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.0.29.tar.bz2.sig) \
<(curl https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.0.29.tar.bz2)
"curl: (23) Failedwriting body (0 != 4096) (23) Failedwriting body" エラー メッセージで失敗しました:
gpg --enable-special-filenames --verify --batch -- '-&3' '-&4' \
3<(curl -s https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.0.29.tar.bz2.sig) \
4<(curl https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.0.29.tar.bz2)
答え1
特定のファイル記述子にリダイレクト使用3< file
。プロセスの置き換えを使用して<( ... )
2つを組み合わせるには使用する必要があります。両方:
3< <( ... )
スペースは重要です。そうでなければ努力すると解釈されます。ここのドキュメントで終了しますが(
有効ではなく、解析エラーが発生します。
コマンドgpg
ラインは次のようになります。
gpg --enable-special-filenames --verify --batch -- '-&3' '-&4' \
3< <(curl -s https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.0.29.tar.bz2.sig) \
4< <(curl https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.0.29.tar.bz2)
curl
これは、通常のファイルから読み取ったように、最初のコマンドの出力を記述子3にリダイレクトし、2番目のコマンドの出力を記述子4にリダイレクトします。
そのように<( ... )
働くコマンドを実行し、その出力をFIFOまたはその下のエントリにリンクし、ファイルが最初に作成されたかの/dev/fd
よう<( ... )
に、コマンドラインの通常の引数でファイルパスを置き換えます。これにより、ファイルパスをリダイレクトなどの他の設定で使用できます。
元のコマンドは最終的に実行されgpg ... 3/dev/fd/63 4/dev/fd/64
、curl
作成された内容に誰も興味がないことを発見してエラーを報告します。また、ファイルが出力gpg
に隠されていてもファイルが存在しないというエラーが発生します。curl