Как экранировать символы через команду SSH в Makefile

456
AAA

Я пытаюсь перезагрузить nginx в контейнере Docker через команду SSH ... Это то, что у меня есть в моем Makefile:

reload: ssh me@x.x.x "docker kill -s HUP `$$(docker ps | grep nginx | awk '')`" 

Но команда не работает ... Я получаю эту ошибку:

"docker kill" requires at least 1 argument. See 'docker kill --help'.  Usage: docker kill [OPTIONS] CONTAINER [CONTAINER...]  Kill one or more running containers make: *** [reload] Error 1 
0

1 ответ на вопрос

0
m720

В bash ",`, $ (), $ (()) предварительно интерпретируются и подставляются.
Если вы хотите экранировать эти символы, вы можете использовать \ backslash.
Попробуйте отладить эту команду, используя "set -x" (которую вы можете отключите, используя "set + x"). Он показывает, что предварительно интерпретируется.
Я предпочитаю один апостроф, так как он не обрабатывается. Хотя вы должны избегать каждого апострофа в строке тоже. Попробуйте это:

ssh me @ xxx 'docker kill -s HUP `$$ (docker ps | grep nginx | ​​awk \' \ ')`'

В этом случае команда между '...' будет выполнена на другой стороне ssh. Все параметры будут выполнены там. Если вы хотите отправить параметр из текущей оболочки, вы должны использовать обходной путь для этого. Например:

"Something_here "$ localvar" 'continnue_command'
таким образом, $ localvar будет заменен и объединен.

Похожие вопросы