Wie Sie Zeichen über den SSH-Befehl in einem Makefile schützen

649
AAA

Ich versuche, Nginx über einen SSH-Befehl in einen Docker-Container zu laden ... Folgendes habe ich in meinem Makefile:

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

Der Befehl funktioniert jedoch nicht ... Ich erhalte folgende Fehlermeldung:

"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 Antwort auf die Frage

0
m720

In bash ",` werden $ (), $ (()) vorinterpretiert und ersetzt.
Wenn Sie diese Zeichen mit Escapezeichen versehen möchten, können Sie \ backslash verwenden.
Versuchen Sie, diesen Befehl mit "set -x" (was Sie können) zu debuggen Mit "set + x" ausschalten.) Zeigt an, was vorab interpretiert wird.
Ich bevorzuge den einzelnen Apostroph, da er nicht verarbeitet wird. Obwohl Sie jeden einzelnen Apostroph in der Zeichenfolge auch entkommen müssen, versuchen Sie Folgendes:

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

In diesem Fall wird der Befehl zwischen '...' auf der anderen Seite der SSH ausgeführt. Alle Parameter werden dort ausgeführt. Wenn Sie einen Parameter aus der aktuellen Shell senden möchten, müssen Sie dafür eine Problemumgehung verwenden. Z.B:

'something_here' "$ localvar" 'continnue_command'
Auf diese Weise wird "$ localvar" ersetzt und verkettet.