Vous ne pouvez pas inclure de guillemets simples dans une chaîne entre guillemets, puisque rien n'est interprété à l'intérieur, à l'exception du guillemet simple qui ferme la chaîne. Vous pouvez concaténer les chaînes entre guillemets simples avec "'"
:
ssh host 'for pid in $(ps -ef | grep "some process" | awk '"'"'{print $2}'"'"'); do kill -9 $pid; done'
Alternativement, concaténer des guillemets simples échappées (\'
):
ssh host 'for pid in $(ps -ef | grep "some process" | awk '\''{print $2}'\''); do kill -9 $pid; done'
Voir Strong Quoting.
La cause de l'erreur
Votre commande est interprétée comme deux $IFS
arguments -Séparé:
for pid in $(ps -ef | grep "some process" | awk {print
}); do kill -9 $pid; done
Il n'y a pas $2
dans les cordes, depuis $2
est interprété comme une variable shell et la valeur de cette variable dans le contexte shell normal est vide.
Ainsi, vous avez envoyé la commande suivante au serveur:
for pid in $(ps -ef | grep "some process" | awk {print }); do kill -9 $pid; done
Si vous exécutez cette commande dans un terminal, vous obtiendrez la même erreur de AWK.
vous pouvez utiliser 'pkill -f" certains processus "' dans ce cas. – ymonad
Cela ne va pas tuer tous les processus avec un certain nom, n'est-ce pas? –