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

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

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

    #!/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
    qmake
        1
    qmake  
       2013-11-28 23:41:19 +08:00
    有一个是当前脚本的进程?
    BOYPT
        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和外面的不一样。
    vicence
        3
    vicence  
    OP
       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
    这样值还是两个
    BOYPT
        4
    BOYPT  
       2013-11-29 00:19:12 +08:00
    @vicence 只要放在``里面就就是子shell了啊,只要是子shell那一定就不对了。
    Jesse
        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}'`
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3144 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:46 · PVG 20:46 · LAX 04:46 · JFK 07:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.