Я использовал сертификат, построенный на другом контексте, перезапустил Apache, ошибки не показывались.
Это означает, что ошибка должна быть связана с сертификатом.
Принимая это во внимание, я -внимательно следил за процедурой, которую использовал для построения центра сертификации. (Я добавлю процедуру внизу этого ответа )и обнаружил ошибку.
Я использовал "временный" сертификат вместо cacert.pem
.
Процедура создания ЦС:
openssl genrsa -des3 -out /etc/pki/CA/private/cakey.pem
openssl req -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/ca.crt
openssl x509 -req -days 100 -in ca.crt -out cacert.pem -signkey private/cakey.pem
Использование массива:
unset -v args
declare -a args
for file in *.zip
do
args+=( --file "$file" )
done
mycli "${args[@]}"
Или, POSIXly:
set --
for file in *.zip
do
set -- "$@" --file "$file"
done
mycli "$@"
Или, если использовать инструменты GNU:
find. -maxdepth 1 -name '*.zip' -printf '--file\0%f\0' |
xargs -0 -- mycli
Существенная разница между подходом на основе массива -и подходом на основеxargs
-:, в то время как первый может завершиться ошибкой "Слишком длинный список аргументов" (, предполагая mycli
не является встроенной командой ), последняя не будет, а вместо этого будет выполняться mycli
более одного раза. Однако обратите внимание, что в этом последнем случае все списки аргументов, кроме последнего вызова, могут заканчиваться на --file
(, а следующий начинается с имени файла ). В зависимости от вашего варианта использования вы можете использовать комбинацию xargs
' вариантов (, например. -n
и -x
), чтобы предотвратить это.
Кроме того, обратите внимание, что find
будет включать в свой вывод скрытые файлы , в то время как альтернативы на основе массива -не будут, если только параметр оболочки dotglob
не установлен в Bash или, в В оболочке POSIX используются выражения подстановки *.zip
и .*.zip
. Для получения подробной информации и предостережений по этому поводу :Как переместить все файлы (, включая скрытые ), из одного каталога в другой? .
Предполагая, что у вас не много тысяч файлов (, это вызовет ошибку «Слишком длинный список аргументов» ), тогда вы можете сделать то же самое с оболочкой zsh
:
mycli./*.zip(P:--file:)
Или из оболочки bash
:
zsh -c 'exec mycli./*.zip(P:--file:)'
(Я использую exec
здесь, чтобы заменить оболочку zsh
процессом mycli
для большей эффективности.)
Квалификатор подстановки имени файла P
добавляет заданную строку (здесь,--file
)как отдельное слово перед каждым элементом, до которого расширяется подстановка.
Чтобы включить скрытые файлы, добавьте D
перед P
, а чтобы ограничить сопоставление только обычными файлами, добавьте.
:
zsh -c 'exec mycli./*.zip(.DP:--file:)'
Для рекурсивного перемещения по подкаталогам:
zsh -c 'exec mycli./**/*.zip(.DP:--file:)'
... и чтобы упорядочить файлы в порядке временной метки модификации (, если вы хотите сделать это ), добавьте om
, как вы добавляли D
и .
ранее.
это работает:
ls *.zip | xargs printf "--file %s " | xargs echo mycli
Как только вы будете удовлетворены результирующей командой, удалите echo
во втором xargs
и повторите -запуск.
Если у вас есть zip-файлы, имя которых содержит пробелы или другие метасимволы оболочки, все немного сложнее.