shell-转义 - shell转义问题

查看:635
本文介绍了shell-转义 - shell转义问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

process="ps -ef|grep /home/abc|awk {print $2}" ---这里将取出进程id的语句定义成变量
下面杀掉这个进程:
kill -9 $process
但是执行的时候报:
kill: /home/abc|grep: arguments must be process or job IDs
kill: /home/abc|grep|awk: arguments must be process or job IDs

应该是转义问题,我用process这样貌似不行

这个process我就想定义成一个公共变量,因为这个脚本很多机器用,而且grep条件可能都不一样,所以我不想直接从这得出进程id,我只想定义成一个语句,下面要用的地方就写成kill -9 $process 这样

那个单引号不能显示,请看截图,谢谢!

解决方案

直接把双引号里内容直接输出了,并未执行。shell需要表达式执行需用``包围

process=`ps -ef|grep '/home/abc'|grep -v grep|awk '{print $2}'`

另外可以考虑这个

 ps -ef|grep '/home/abc'|grep -v grep|awk '{print $2}'|xargs -n1 kill -9

题主说作为变量哪里需要就哪里调用

process="ps -ef|grep /home/abc|grep -v grep|awk '{print \$2}'"
--需要执行可以用$($process),不过试了下不行,ERROR: Unsupported SysV option.
考虑是否可以用eval(方法来自google,测试可行)
kill -9 `eval $process`

这篇关于shell-转义 - shell转义问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆