我正在尝试使用以下ant脚本
来终止进程<target name="stopappserver">
<sshexec host="servername"
username="User"
password="password"
command="/local/jboss/hmcs-apps/jboss/bin/stop_hmcs-apps-2.sh"/>
</target>
stop_hmcs-apps-2.sh包含以下代码行
ps -edf |grep `ps -edf |grep hmcs-apps|grep -v grep |awk '{print $2}'` |grep -v hmcs-apps |awk '{print $2}' |xargs kill -9
当我运行ant脚本时,我得到以下输出,并且该过程仍在运行。当我直接从服务器运行脚本stop_hmcs-apps-2.sh时,它运行正常。
stopappserver:
[sshexec] Connecting to WDCDVUA43.hmco.com:22
[sshexec] cmd : /local/jboss/hmcs-apps/jboss/bin/stop_hmcs-apps-2.sh
[sshexec] grep: can't open 6503
[sshexec] grep: can't open 14217
[sshexec] grep: can't open 6501
BUILD SUCCESSFUL
如何解决此问题,以便我可以使用我的ant脚本
来终止进程答案 0 :(得分:2)
让我们从清理这一行开始:
ps -edf |grep `ps -edf |grep hmcs-apps|grep -v grep |awk '{print $2}'` |grep -v hmcs-apps |awk '{print $2}' |xargs kill -9
此:
ps -edf |grep hmcs-apps|grep -v grep |awk '{print $2}'
可以更简洁地写成:
ps -edf |awk '/hmcs-apps/ && !/grep/{print $2}'
和此:
ps -edf |grep `whatever` |grep -v hmcs-apps |awk '{print $2}' |xargs kill -9
可以减少删除一些管道:
ps -edf |awk -v x=$(whatever) '($0~x) && !/hmcs-apps/{print $2}' |xargs kill -9
所以那么你的整行可以写成几个更少的管道:
ps -edf |awk -v x=$(ps -edf |awk '/hmcs-apps/ && !/grep/{print $2}') '($0~x) && !/hmcs-apps/{print $2}' |xargs kill -9
所以现在唯一剩下的问题是 - 它打算做什么?
调用ps -edf两次并解析它的输出一次用作grep regexp再次解析它的输出然后从输出中排除一些字符串....它有点混乱。
告诉我们它的意图(使用ps -edf的一些示例输入),我们可以告诉你如何编写它。