Перенаправления на определенные файловые дескрипторы используют 3< file
. Замена процесса использует <(... )
. Чтобы объединить два, вам нужно использовать оба:
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, а второй — в дескриптор 4 точно так же, как если бы вы читали их из обычного файла.
Способ работы<(... )
заключается в том, что он запускает команду с выходом, подключенным либо к FIFO, либо к записи в /dev/fd
, а затем <(... )
заменяется в командной строке на путь к этот файл как обычный аргумент, как если бы он был записан там с самого начала. Затем путь к файлу можно использовать с другими конструкциями, такими как перенаправление.
Ваша первоначальная команда завершается выполнением gpg... 3/dev/fd/63 4/dev/fd/64
, а затем curl
обнаруживает, что никого не интересует то, что она пишет, и сообщает об этой ошибке. Я также получил сообщение об ошибке от самого gpg
о том, что эти файлы не существуют, хотя оно было скрыто в выводе curl
.
Возможно вам поможет полная карта дистрибутива:
https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg