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 .
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?
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 .
Este é o começo de uma versão melhorada. Até agora, mudei para:
grep s ( awk pode fazer correspondência de regexp) ps 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"'