V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
vicence
V2EX  ›  Linux

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

  •  
  •   vicence · Nov 28, 2013 · 8418 views
    This topic created in 4533 days ago, the information mentioned may be changed or developed.
    脚本如下:

    #!/bin/bash
    # using recursion



    # cpu使用率

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

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



    第一行还是输出两个的。

    因为是在子shell里面运行,里面的$0和外面的不一样。
    vicence
        3
    vicence  
    OP
       Nov 29, 2013
    @BOYPT 但如果想取ps aux|grep $0|grep -v grep|mawk '{print $3}'的值,
    num=`ps aux|grep $0|grep -v grep|mawk '{print $3}'`
    echo $num
    这样值还是两个
    BOYPT
        4
    BOYPT  
       Nov 29, 2013
    @vicence 只要放在``里面就就是子shell了啊,只要是子shell那一定就不对了。
    Jesse
        5
    Jesse  
       Nov 29, 2013
    @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}'`
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   991 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 20:12 · PVG 04:12 · LAX 13:12 · JFK 16:12
    ♥ Do have faith in what you're doing.