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

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

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

"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

1 ответ1

0

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

ssh me@x.x.x 'docker kill -s HUP `$$(docker ps | grep nginx | awk \'{print $$1}\')`'

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .