Вы можете получить вывод оболочки -в кавычках , используя модификатор расширения@Q
в Bash 4.4 и более поздних версиях:
$ echo "$timeStamp" - Executing command: sudo /home/editini.sh "${@@Q}"
Mon 04/16/18 04-05-pm - Executing command: sudo /home/editini.sh 'one' 'two' 'three' 'four' 'five' 'six'
Он использует одинарные кавычки, а не двойные, но это гарантирует, что вывод является допустимым в качестве ввода обратно в оболочку, которая делает то, что вы ожидаете. Пример того, где это имеет значение, приведен ниже, но если ваш формат журнала требует двойных кавычек, это бесполезно.
Несколько сбивает с толку, ${@@Q}
использует @
для двух разных значений в последовательных символах :первое @
представляет массив аргументов, а второе вводит модификатор, который преобразует вывод расширения массива. Модификатор Q
приводит к заключению вывода в кавычки. $@
расширяется до каждого элемента по очереди, в отличие от $*
, но это вероятно не имеет значения в данном случае (хотя может быть, если ваш реальный код более сложен ).
@Q
и printf %q
, используйте одинарные кавычки, поскольку они запрещают другие расширения оболочки -, если в одном из аргументов есть $
, `
, \
, "
или !
., что-либо с двойными кавычками будет подозрительно. @Q
гарантирует, что каждый термин заключен в кавычки, даже если это не обязательно требуется (, а printf
не требует ). Пробелы по-прежнему обрабатываются правильно.
$ set -- 'o$ne' "t w o" th\`ree fo\\ur five\! s\"i\'x
$ echo "$timeStamp" - Executing command: sudo /home/editini.sh "${@@Q}"
Mon 04/16/18 04-05-pm - Executing command: sudo /home/editini.sh 'o$ne' 't w o' 'th`ree' 'fo\ur' 'five!' 's"i'\''x'
Вы можете скопировать эту команду обратно, и она просто сработает, независимо от того, насколько извращенным будет ввод.
Удалось заставить это работать, определив post_tasks
вместе с ролью, таким образом, после запуска всех других задач в плейбуках последний шаг (yum update )работает нормально, наследуя имя хоста виртуальной машины из последних шагов
Надеюсь, это кому-нибудь поможет..