分页: 1 / 1

求神腿。。。。Shell脚本中如何使一条命令实现两条命令的功能(如下)

发表于 : 2012-07-31 16:34
china_fei
在linux命令中能不能用一条命令实现下面的功能
1 列出gedit运行的程序(ps aux |grep gedit)
2 根据第一条命令的返回值 kill -9 3231 (假设3231为第一条命令的结果中的pid)

通常咱们写shell脚本的时候会把第一个命令采用ps aux |grep agent_image |awk /-c/'{ print $2} 赋值到一个变量上,但是我现在不想使用变量,就是想直接让一条命令直接使用另外一条命令的结果。。。

求大腿,求大神,求赐教!!!

Re: 求神腿。。。。Shell脚本中如何使一条命令实现两条命令的功能(如下)

发表于 : 2012-07-31 16:45
lilydjwg

代码: 全选

kill -9 $(ps aux |grep agent_image |awk /-c/'{ print $2})
话说一开始就用 9 号信号,真心狠手辣啊。

Re: 求神腿。。。。Shell脚本中如何使一条命令实现两条命令的功能(如下)

发表于 : 2012-07-31 16:53
china_fei
#!/bin/sh
res=`kill -9 $( ps aux |grep gedit |awk /-c/'{ print $2}')`

额,神,貌似不对。。。 我试着kill gedit 你在本地试试
不过依然感谢

Re: 求神腿。。。。Shell脚本中如何使一条命令实现两条命令的功能(如下)

发表于 : 2012-07-31 17:02
lilydjwg
china_fei 写了:#!/bin/sh
res=`kill -9 $( ps aux |grep gedit |awk /-c/'{ print $2}')`

额,神,貌似不对。。。 我试着kill gedit 你在本地试试
不过依然感谢
那是因为你给的命令不对。应该是:

代码: 全选

#!/bin/sh
kill -9 $(ps aux |grep gedit |awk '{print $2}')
`xxx` 和 $(xxx) 是等价的。

Re: 求神腿。。。。Shell脚本中如何使一条命令实现两条命令的功能(如下)

发表于 : 2012-07-31 18:03
china_fei
果然是神。。。。
不过,额,神可不可以再问下
这个东西运行之后会出现 bash: kill: (5660) - 没有那个进程
虽然不影响我 上来就9信号的目的。。。
你能给我解释下么,谢谢大神。。。。 :em01

Re: 求神腿。。。。Shell脚本中如何使一条命令实现两条命令的功能(如下)

发表于 : 2012-07-31 18:36
lilydjwg
china_fei 写了:果然是神。。。。
不过,额,神可不可以再问下
这个东西运行之后会出现 bash: kill: (5660) - 没有那个进程
虽然不影响我 上来就9信号的目的。。。
你能给我解释下么,谢谢大神。。。。 :em01
「没有那个进程」就是说没有你要找的进程嘛。
后边的没看太懂……

Re: 求神腿。。。。Shell脚本中如何使一条命令实现两条命令的功能(如下)

发表于 : 2012-07-31 19:50
cao627

代码: 全选

ps aux |grep gedit |awk '{print $2}'
命令本身会启动一个grep 进程,该进程在用ps aux命令显示其条目时也包含gedit(gedit做为grep参数会被ps aux显示到),但当整个ps aux |grep gedit |awk '{print $2}'命令的运行结果作为kill命令的参数时,grep进程已经结束了。所以kill命令找不到这个进程号了。

Re: 求神腿。。。。Shell脚本中如何使一条命令实现两条命令的功能(如下)

发表于 : 2012-07-31 20:52
aerofox
对于你这个特定的任务,无需又是命令扩展又是管道的,直接用现成的命令更方便,pkill、skill、killall 都适合。

Re: 求神腿。。。。Shell脚本中如何使一条命令实现两条命令的功能(如下)

发表于 : 2012-07-31 22:55
china_fei
神,我自己又想了一个

ps aux | grep gedit |colrm 1 9|colrm 6|xargs kill -9
如果想只删除头一个进程的话
ps aux | grep gedit | head -n 1 | colrm 1 9 | colrm 6 | xargs kill -9

正确执行。。。。

我上面说的那个bash:kill....没有那个进程

我觉得7楼的解释是正确的。

谢谢大家的关注,谢谢各位大神的帮忙.

Re: 求神腿。。。。Shell脚本中如何使一条命令实现两条命令的功能(如下)

发表于 : 2012-08-01 10:18
noc_ken
反引号:执行命令,后使用AWK返回PID号,可以不用使用$()方式,fedora 16 x86-64,bash 4.2.10 awk4.0执行有效
kill -9 `ps aux | grep gedit | awk '$11 !~ /grep/{print $2}'`

(PS:$11是COMMAND所在的FIELD区域,这样可以避免出现grep的进程号,话说我一个用FEDORA来UBUNTU这里游荡会不会被人打。。。)

Re: 求神腿。。。。Shell脚本中如何使一条命令实现两条命令的功能(如下)

发表于 : 2012-08-01 10:21
funicorn
man pkill