Запуск команды docker exec со строкой оболочки и параметрами в скрипте bash

#bash #docker

#bash #docker

Вопрос:

Я пытаюсь запустить следующую команду docker exec в скрипте bash, где я передаю 2 параметра в скрипт bash. Предполагается, что команда удаляет каталоги, начинающиеся с определенной строки. Кажется, я неправильно передаю параметры:

  • Значение $container равно $ 1

  • Значение $database равно $ 2

  • $currdate устанавливается внутри скрипта bash

    docker exec $container sh -c ‘rm -rf /path/to/directory/${database}-${currdate}-*/’

Комментарии:

1. 1. используйте свои переменные внутри двойных кавычек. 2. переменные внутри одинарных кавычек не интерполируются. надеюсь, это поможет.

Ответ №1:

Для интерполяции переменных необходимо использовать двойные кавычки. Одинарные кавычки ничего не интерполируют, но двойные кавычки будут.

 docker exec $container sh -c "rm -rf /path/to/directory/${database}-${currdate}-*/"
  

Из руководства по Bash:

3.1.2.2 Одинарные кавычки

Заключение символов в одинарные кавычки ( ' ) сохраняет буквальное значение каждого символа в кавычках. Одинарная кавычка может не встречаться между одинарными кавычками, даже если перед ними стоит обратная косая черта.

3.1.2.3 Двойные кавычки

Заключение символов в двойные кавычки ( " ) сохраняет буквальное значение всех символов в кавычках, за исключением $ , ` , , и, когда расширение истории включено, ! . Символы $ и ` сохраняют свое особое значение в двойных кавычках (см. Расширения оболочки). Обратная косая черта сохраняет свое особое значение, только если за ней следует один из следующих символов: $ , ` , " , , или перевод строки. В двойных кавычках удаляются обратные косые черты, за которыми следует один из этих символов. Обратная косая черта, предшествующая символам без специального значения, остается неизмененной. Двойная кавычка может быть заключена в двойные кавычки, предваряя ее обратной косой чертой. Если включено, расширение истории будет выполняться, если ! символ, заключенный в двойные кавычки, не экранируется с помощью обратной косой черты. Обратная косая черта, предшествующая ! значению, не удаляется.

Специальные параметры * и @ имеют особое значение, когда заключены в двойные кавычки (см. Расширение параметров оболочки).