分页: 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信号的目的。。。
你能给我解释下么,谢谢大神。。。。

Re: 求神腿。。。。Shell脚本中如何使一条命令实现两条命令的功能(如下)
发表于 : 2012-07-31 18:36
由 lilydjwg
china_fei 写了:果然是神。。。。
不过,额,神可不可以再问下
这个东西运行之后会出现 bash: kill: (5660) - 没有那个进程
虽然不影响我 上来就9信号的目的。。。
你能给我解释下么,谢谢大神。。。。

「没有那个进程」就是说没有你要找的进程嘛。
后边的没看太懂……
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