首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
V2EX  ›  Linux

这命令echo `ps aux|grep $0|grep -v grep|mawk '{print $3}'`在终端输出是一个数值, 在脚本中会输出两个值,为什么?

  •  
  •   vicence · 2013-11-28 23:29:55 +08:00 · 5621 次点击
    这是一个创建于 2119 天前的主题,其中的信息可能已经有所发展或是发生改变。
    脚本如下:

    #!/bin/bash
    # using recursion



    # cpu使用率

    echo `ps aux|grep $0|grep -v grep|mawk '{print $3}'`
    5 回复  |  直到 1970-01-01 08:00:00 +08:00
        1
    qmake   2013-11-28 23:41:19 +08:00
    有一个是当前脚本的进程?
        2
    BOYPT   2013-11-28 23:54:50 +08:00
    其实写成这样就能看出区别:

    echo `ps aux|grep $0|grep -v grep|mawk '{print $3}'`
    ps aux|grep $0|grep -v grep|mawk '{print $3}'



    第一行还是输出两个的。

    因为是在子shell里面运行,里面的$0和外面的不一样。
        3
    vicence   2013-11-29 00:08:01 +08:00
    @BOYPT 但如果想取ps aux|grep $0|grep -v grep|mawk '{print $3}'的值,
    num=`ps aux|grep $0|grep -v grep|mawk '{print $3}'`
    echo $num
    这样值还是两个
        4
    BOYPT   2013-11-29 00:19:12 +08:00
    @vicence 只要放在``里面就就是子shell了啊,只要是子shell那一定就不对了。
        5
    Jesse   2013-11-29 01:10:45 +08:00
    @vicence

    # A: fine
    echo `ps aux|grep $$|grep -v grep|awk '{print $3}'`

    # B : fine
    ps aux|awk '($2 == PROCINFO["ppid"]){print $3}'

    # C : better
    export shpid=$$
    echo `ps aux|awk '($2 == ENVIRON["shpid"]){print $3}'`
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4128 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 20ms · UTC 03:13 · PVG 11:13 · LAX 20:13 · JFK 23:13
    ♥ Do have faith in what you're doing.