Intereting Posts
Как я могу сделать веб-сервер с помощью привязанного к интернету интернет-соединения? Отключить кэширование уровня ОС Изменение имени хоста не изменяет имя терминала Инструмент Linux для отслеживания пространства каталога с течением времени Зачем мне 3 репозитария git для ikiwiki, если я хочу совершить локально Прочитать текстовые строки между двумя строками Какой дистрибутив наиболее похож на RHEL 5? Служба mysql выходит без ошибок Запустите программу, когда любое беспроводное соединение появляется с помощью netcfg Каковы некоторые варианты для легких дистрибутивов, особенно для виртуализации? Добавление «:» форматирования времени с использованием awk Размер буфера сокета и производительность Зеркальная папка с правами root Соединение SSH с локальным Rasberry Pi время от времени теряет маршрут к хосту Как прозрачно контролировать SSH-доступ / сетевой трафик в Gentoo / общем Linux?

bash добавляет апострофы к расширенной переменной

Я читаю файл внутри моего сценария bash, где каждая строка состоит из нескольких столбцов:

ANSIBLE 'first run' '--diff --extra-vars "client=yes fast=no"' 

Как вы можете видеть, строка состоит из трех столбцов, которые имеют пробелы в апострофах. Третий столбец содержит опции для вызова двоичного кода. Когда я прочитал в файле, я сохранил эти параметры для переменной:

 custom_options=${columns[2]} 

Это оценивает

 custom_options='--diff --extra-vars "client=yes fast=no"' 

Теперь я хочу выполнить свой двоичный файл с такими параметрами:

 ansible-playbook $custom_options site.yml 

Однако это не удается, потому что при выполнении были добавлены апострофы вокруг внутренней строки:

 ansible-playbook --diff --extra-vars '"client=yes fast=no"' site.yml 

Кто-нибудь знает, как заменить переменную строку as-is?

Вот короткий сценарий для быстрого воспроизведения поведения:

 #!/bin/bash set -x touch "as is" command='-name "as is"' find . $command -type f 

Я нашел решение, а не решение. Я окружил всю команду переменной внутри выражения eval :

 eval "ansible-playbook $custom_options site.yml" 

Здесь эквивалентное использование в примере скрипта:

 ... eval "find . $command -type f" 

Я не баш-гуру, и я не знаю, имеет ли это обходное решение какие-либо побочные эффекты. Тем не менее, я протестировал следующее:

  • eval работает с трубами: eval "command | tee file"
  • возможны котировки внутри eval: eval "command \"${var}\""

Однако это соответствует моим потребностям, но оно кажется грязным. Лучшие решения приветствуются.