我想编写一个脚本,让我通过向脚本输入命令来终止一个进程。
我已经完成了大部分工作,但我的问题是,目前我需要 ssh 两次才能杀死它 1)获取进程 ID 2)杀死该进程 - 我希望一次性完成这些工作,而且我尝试过管道,但似乎无法让它工作。
这是我当前的工作版本:
ProcessNumber=`ssh user1@server1 -p22222 ps -ef | awk '/[s]sh -f -N -T -R32400:localhost:32400 remote@remote/{print $2}'`
ssh user1@server1 -p22222 "kill $ProcessNumber"
这是我无法运行的一段脚本。
ssh user1@server1 -p22222 kill `ps -ef | awk "/[s]sh -f -N -T -R32400:localhost:32400 remote@remote/{print $2}"`
有什么建议可以让第二个一次性完成吗?
答案1
解析输出ps -ef
有点棘手。我建议您pgrep
使用
pgrep -f `ssh -f -N -T -R32400:localhost:32400 remote@remote`
或者直接用以下方法减少所有内容pkill
:
ssh user1@server1 -p22222 "pkill -f 'ssh -f -N -T -R32400:localhost:32400 remote@remote'"
答案2
类似下面这个丑陋的一行代码就可以做到这一点:
ssh user1@server1 -p22222 "kill \$(ps -ef | awk '/[s]sh -f -N -T -R32400:localhost:32400 remote@remote/{print \$2}')"
转义可能仍需要一些调整(没有测试)。