Пытаюсь загрузить сертификаты (только что созданные) в какое-то хранилище.
Итак, я могу прочитать все сертификаты в моей папке и хочу использовать содержимое каждого из этих файлов для переменной в цикле.
#!/bin/bash
dir = "${0%/*}"
#for f in $(cat $dir"/"*.crt)
# do
# data='{"certificate_data":'"$f"'}'
#done
url = "localhost:50183/api/v0.1/Certificates"
data='{"certificate_data":'$(cat $dir"/"*.crt)'}'
echo "$data"
Итак, я получил все сертификаты за один раз, но мне нужно получить в $ data каждое содержимое файлов в цикле с правильной формой, например:
{"certificate_data":"<certificate_data_from_file>"}
{"certificate_data":"<certificate_data_from_file>"}
......
and so on
Я знаю, что мне нужно использовать еще один цикл, но не знаю, как это сделать.
Будьте благодарны за любые подсказки!
Непонятно, что вы делаете с информацией, поскольку ваш простой пример продолжает перезаписывать data
. Но, возможно, в вашем цикле for
у вас будет data_file='{"certificate_data":'"$f"'}'
, затем data_cert='{"certificate_data":'$(< $dir"/"*.crt)'}'
, за которым следует любая логика, которую вы хотите использовать с $data_file
и $data_cert
.
хорошо, просто попробуйте удалить for f in $(cat $dir"/"*.crt) do data='{"certificate_data":'"$f"'}' done
, и он будет работать без него, но заполнил все сертификаты в 1 "certificate_data", и мне нужно поместить 1 сертификат в 1 "certificate_data"
Помогает ли изменение обоих назначений данных? data = "${data}{\"certificate_data\":....}"
Это должно сделать работу:
#!/bin/bash
for f in ./dir/*.crt
do
data='{"certificate_data":"'"$(< "${f}")"'"}'
echo "${data}"
done
Контрольная работа:
$ ls ./dir/*
./dir/cert1.crt ./dir/cert2.crt
$ cat ./dir/*
I am certificate1.
I am certificate2.
$ ./cert.sh
{"certificate_data":"I am certificate1."}
{"certificate_data":"I am certificate2."}
По сути, нет необходимости засорять память переменной. Просто добавьте волшебный соус прямо в аргумент echo
.
Я думаю, что спрашивающий хочет иметь переменную, чтобы он мог что-нибудь сделать? с этим. echo здесь - всего лишь проверка того, как что-то делать с переменной.
Спасибо, должно получиться, но не для меня. Я пытаюсь установить текущий каталог cwd=$(pwd)
, затем for f in $cwd"/"*.crt
и получаю только данные одного сертификата. Мне нужно отделить файлы * .crt от других файлов, потому что мой 1-й сценарий генерирует для них разные типы сертификатов и ключей, поэтому мне нужно вставить только данные сертификата без данных из файлов * .key.
Я отредактировал anser, чтобы он принимал только .crt, если вы хотите все crts в текущем каталоге, используйте следующее: для f в "$ (pwd) /" *. Crt в любом случае для более безопасного решения я бы скорее использовал find -exec или xargs -0 combo
Могу я спросить, почему, когда я использовал эхо "$ {data}" после цикла, он показывает мне только 2-й (из 2) сертификатов. Но когда я использую его в цикле, он показывает мне 2 из 2?
После завершения цикла переменная содержит только последнее содержимое последнего файла crt. В цикле мы перебираем все файлы. Не знаю, помогло ли это.
Боковое примечание:
$(cat file.txt)
можно заменить на$(< file.txt)
.