我有一个想远程杀死的进程。我试过了
ssh remotehost "kill -9 $(ps -aux | grep foo | grep bar | awk '{print $2}')"
但这会返回错误
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
但是,如果我在引号内运行命令
kill -9 $(ps -aux | grep foo | grep bar | awk '{print $2}')
在远程主机上它工作正常。我在这里错过了什么吗?
$(..)
命令替换将失败,因为本地$
shell 甚至在它被传递给stdin
命令之前就对其进行了扩展ssh
。您要么需要对其进行转义,要么使用此处的字符串。awk
打印中的命令也$2
被插入为命令行参数。所以我们逃避它以推迟它的扩展,直到命令被远程执行。随着逃避,
或使用 here-doc
另请注意,这
grep .. | grep .. | awk
是多余的。awk
您可以单独完成整个操作。或者甚至更好地使用pkill
直接按名称杀死进程。这对我有用,可以杀死一组主机:
你可以选择做类似的事情