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"'