Eu tenho um processo que eu quero matar remotamente. eu tentei
ssh remotehost "kill -9 $(ps -aux | grep foo | grep bar | awk '{print $2}')"
mas isso retorna o erro
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
No entanto, se eu executar o comando entre aspas
kill -9 $(ps -aux | grep foo | grep bar | awk '{print $2}')
no host remoto funciona bem. Estou faltando alguma coisa aqui?
A
$(..)
substituição do comando falharia, pois o$
é expandido pelo shell local antes mesmo de ser passado parastdin
ossh
comando. Você precisa escapar ou usar here-strings.Além disso, o comando dentro do
awk
que imprime$2
é interpolado como um argumento de linha de comando. Então escapamos dele para adiar sua expansão até que o comando seja executado remotamente.Com a fuga,
ou com aqui-doc
Observe também que
grep .. | grep .. | awk
é supérfluo. Você pode fazer toda a operaçãoawk
sozinho. Ou ainda melhor usarpkill
para fazer com que o processo mate diretamente pelo nome.Isso funcionou para eu matar por um conjunto de hosts:
você pode opcionalmente fazer algo como