Как обрабатывать кавычки, специальные символы обратного удара для запуска команды оболочки linux bash на удаленном сервере - PullRequest
0 голосов
/ 10 июня 2019

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

 ssh -o ConnectTimeout=5 splunk@10.145.32.172 '
     sdline="`
           grep -n TA-aws-hf-{{client_code}}-{{env_name}} /opt/splunk/etc/system/local/serverclass.conf
          | awk -F \":\" \'{print $1}\'
         ` 
         && sed -ie \"$sdline,`
              echo $sdline + 3 
              | bc
         `d\"  /opt/splunk/etc/system/local/serverclass.conf
     " 
> ^C

Даже пробовалниже путь:

ssh -o ConnectTimeout=5 splunk@10.145.32.172 exec sdline=`grep -n TA-aws-hf-{{client_code}}-{{env_name}} /opt/splunk/etc/system/local/serverclass.conf|awk -F ":" '{print $1}'` && sed -ie "$sdline,`echo $sdline + 3|bc` d"  /opt/splunk/etc/system/local/serverclass.conf
grep: /opt/splunk/etc/system/local/serverclass.conf: No such file or directory
bash: line 0: exec: sdline=: not found

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

Ваша удаленная команда довольно сложна.

Я предлагаю следующее:

  1. Используйте ssh для получения интерактивной оболочки в 10.145.32.172
  2. Создайте сценарий на 10.145.32.172, который сделает всю работу, со всем жестко закодированным.

  3. Измените параметры командной строки в вашем скрипте.

  4. Вызовите ваш скрипт удаленно с вашего локального компьютера.

Эта стратегия упрощает скрипт и его обслуживание. Позволяет отправлять только важные параметры.

Если вам нужно развернуть скрипт на многих удаленных машинах. Используйте ресурсы общего хранилища, такие как NFS. При желании скопируйте скрипт, используя scp перед его запуском.

2 голосов
/ 10 июня 2019

Контекст. Похоже, этот вопрос возник как проблема XY .OP, кажется, хочет удалить 3 строки, включая и после строки «TA-aws-hf - {{client_code}} - {{env_name}}».


Обратные метки не рекомендуется;используйте $(modern $(command) substitution) при необходимости.В этом случае нет необходимости.

Если на вашем удаленном сервере есть GNU sed:

ssh splunk@10.145.32.172 'sed -i "/TA-aws-hf-{{client_code}}-{{env_name}}/,+2d" /opt/splunk/etc/system/local/serverclass.conf' 

Если это дает вам sed: -e expression #1, char 19: unexpected ',':

ssh splunk@10.145.32.172 '
  cd /opt/splunk/etc/system/local
  awk "/TA-aws-hf-{{client_code}}-{{/ {i=-3} i++>0" \
    serverclass.conf > temp && mv $_ serverclass.conf
'
...