linux 执行sh没有结果,linux执行.sh命令会报错,请教大神是哪里出问题了?

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

vip1999

推荐于 2016.11.21

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:40%    等级:11

已帮助:6252人

严格来说,你的命令不是很严格。先不说这个问题了。

你的写法思路正确,只是在处理管道前边得到的内容时有三个小小的错误。

第一,要把grep 进程也一并过滤去。

grep 123换成grep -i grep |grep 123

第二,我们要处理这种情况,这就是不严格的所在。如果出现了出现进程名称也是123和1234的话,我们怎么处理,所以应该把awk '{print $2}'放到grep -i grep |grep 123它们之前,即grep -i grep | awk '{print $2}' |grep 123

第三,如果有两个或多个进程的id包含123,当然这种情况例外了一些,kill 前边的管道会返回多个值,如下

2123

1234

12345

这时通过kill命令执行一定会报错。

所以要做进一步修改

print $2要改成printf $2" "

这样如果遇到上面的特例,kill前边的管道就会得到:

"2123 1234 12345 "不包含引号

所以按照你的思路正确的做法是,

ps -ef |grep -i grep |awk '{printf $2" "}' |grep 123 | kill -9

其它有更好的实现,更建议用pkill和pgrep。多看man手册还是有好处的。有几位已经写到,不赘述了就。追问: 我想问问 这个写法是没错的, 就是这样执行的结果会执行后面的ERROR内容,这会是哪里的问题??

00分享举报

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值