管道输入循环后变量值丢失

时间:2017-01-07 16:21:47

标签: bash shell

我是bash的新手,我正试图找到奇怪的pid和最大的内存使用量的过程,所以我想出了:

maxpid=0; maxsize=0; ps -axl --no-headers | tr -s ' ' : | cut -d : -f 3,8 | while read proc; do pid=$((echo $proc | cut -d : -f 1)); psize=$((echo $proc | cut -d : -f 2));if(($pid % 2 == 1)); then if(($psize > $maxsize)); then maxsize=$psize; maxpid=$pid; fi; fi; done; echo "$maxpid $maxsize";

带有一点缩进的是:

maxpid=0; maxsize=0; 
ps -axl --no-headers | tr -s ' ' : | cut -d : -f 3,8 | 
while read proc; do                              (1)
    pid=$((echo $proc | cut -d : -f 1));         (2)
    psize=$((echo $proc | cut -d : -f 2));       (3)
    if(($pid % 2 == 1); then 
        if($psize > $maxsize); then 
            maxsize=$psize; 
            maxpid=$pid; 
        fi; 
    fi; 
done; 
echo "$maxpid $maxsize";

我需要从命令行运行它,所以我不想要一个bash脚本。 我知道两个嵌套的if不太好,但是我无法使用逻辑AND ..我试过了:

if(($pid % 2 -eq 1 -a $psize -gt $maxsize)); then

以及

if(($pid % 2 == 1 && $psize > $maxsize)); then

我也尝试过方形支架,但是我无法让它工作。 任何帮助和纠正都受到广泛赞赏。

编辑:我能够将行(1),(2)和(3)缩短为

while read -r pid psize; do

编辑2:通过更多调试,我能够看到if body(我更正为if (($pid % 2 ==1)) && (($psize > $maxsize)); then,vars maxpidmaxsize内的一切正常工作正确设置,但最后echo正在打印“0 0”..看起来我有同步问题

0 个答案:

没有答案