assiste não exibindo a saída do script

0

Eu tenho um script simples que usa apenas o awk para extrair algumas informações da saída de ps . Quando eu corro isso no terminal, funciona bem. Mas quando executo este script com o relógio:

watch bench_run.sh

não há saída alguma.

O script é o seguinte

#!/bin/bash

bench_run() {
    local awk_cmd='
        {
            time=$10
            bench=$46

            start=match(bench, /throughput/)
            start+=(RLENGTH+1)
            end=match(bench, /base/)
            printf ("%s %s\n", time, substr(bench, start, end-start-1))
        }
    '

    ps aux | grep $USER | grep simulator | awk "$awk_cmd"
}

bench_run

Qual poderia ser o motivo para o relógio não imprimir nenhuma saída?

    
por Hashken 30.10.2015 / 12:13

2 respostas

1

Tente substituir ps aux por ps auxww para obter a saída completa. ps provavelmente está testando sua entrada ou tty e decidindo agir de maneira diferente dentro de watch .

    
por 30.10.2015 / 12:46
0

Este é o começo de uma versão melhorada. Até agora, mudei para:

  • livra-se do grep s ( awk pode fazer correspondência de regexp)
  • use melhor as opções ps
  • livrou-se da estranha variável local awk_cmd
  • entre $ 1 e $ 46 (que agora é $ 37 com 9 campos indesejados removidos de ps output
#!/bin/bash

bench_run() {

    ps -u "$USER" -o time,args | awk "/simulator/ {
            time=\
            bench=\

            start=match(bench, /throughput/)
            start+=(RLENGTH+1)
            end=match(bench, /base/)
            printf ("%s %s\n", time, substr(bench, start, end-start-1))
            }
    "
}

bench_run

Aqui está uma versão que usa sed

#! /bin/sh
watch 'ps -u "$USER" -o time,args | 
       sed -n -e "/[s]imulator/ s/\([^ ]*\) .*\(throughput.*\)base.*/ / p"'

Eu usei ' aspas simples ao redor do comando watch, então usei " aspas duplas em torno do comando sed que está dentro dele.

Se simulator for o nome completo do processo, você poderá usar:

#! /bin/sh
watch 'ps -o time,args -C simulator | 
       sed -n -e "s/\([^ ]*\) .*\(throughput.*\)base.*/ / p"'
    
por 30.10.2015 / 13:23

Tags