Рейтинг:0

Передать аргументы команды как переменную

флаг ar

Я сделал bash-скрипт для резервного копирования моего сервера AWS Ligthsail с помощью restic. Все наконец-то работает, но есть одна вещь, на которую я не нашел ответа.

Только та часть, где проблема:

//Настройки
забыв_политики=(--удерживать-ежедневно 7д --удерживать-еженедельно 1м --удерживать-ежемесячно 1г --удерживать-в-годе 2г)

//(… другой код)

забыть_старый () {
    # Забыть и обрезать
    restic -r $RESTIC_REPOSITORY забыть "${forget_policy}" --prune | журнал

    # Проверяем, в порядке ли статус выхода
    статус=$?
    если [ $status -ne 0 ]; тогда
        log "Забыть ошибку ${status}"
        выход 1
    фи
}

//(… другой код)

забыть_старый

Вывод

>> неверный аргумент "--prune" для флага "--keep-in-daily": число не найдено

Я не могу передать переменную $forget_policy команде «забыть». Когда я оборачиваю переменную в "", я получаю

>> неизвестный флаг: --keep-in-daily 7d --keep-in-weekly 1m --keep-in-monthly 1y --keep-in-yearly 2y

Когда я копирую содержимое переменной непосредственно в команду, она работает. Так что я должен делать что-то неправильно с передачей переменной.

Рейтинг:1
флаг hr

Расширять каждый элементов вашего массива аргументов как отдельное слово, которое вам нужно "${forget_policy[@]}"

"${забыть_политику}" эквивалентно "${forget_policy[0]}" поэтому расширяется только до первого аргумента, поэтому вы получаете --keep-внутри-ежедневно --prune

См. Массивы подраздел под ПАРАМЕТРЫ на странице руководства bash.

Rever_2019 avatar
флаг ar
Спасибо. Я делаю (к сожалению) недостаточно сценариев bash. Не заметил, что я превратил его в массив, добавив (). Раньше у меня было просто "forget_policy="--keep-in-daily 7d --...". Это просто строка, и она не работала. Погуглил и нашел "версию массива"
флаг hr
@ Rever_2019 в этом случае это был счастливый случай - использование массива - это правильный способ обработки такого списка аргументов;)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.