Не пытайтесь исправить уже существующую команду.

Это начало улучшенной версии. Пока что я изменил его на:

  • избавьтесь от grep s ( awk может выполнять сопоставление регулярных выражений)
  • лучше использовать ps options
  • избавились от странной локальной переменной awk_cmd
  • quote $ 1 и $ 46 (теперь это 37 $ с удалением 9 нежелательных полей из ps output
#!/bin/bash

bench_run() {

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

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

bench_run

Вот версия, которая использует ] sed

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

Я использовал одинарные кавычки ' вокруг команды watch, поэтому я использовал двойные кавычки " внутри команды sed.

Если simulator - полное имя процесса, вы можете использовать:

#! /bin/sh
watch 'ps -o time,args -C simulator | 
       sed -n -e "s/\([^ ]*\) .*\(throughput.*\)base.*/\1 \2/ p"'
3
27.10.2019, 00:45
1 ответ

Как упоминал @user1934428 , вы можете явно воссоздать хеш-таблицу, запустив rehash. Чтобы не делать это вручную, поместите это в свойzshrc:

zstyle ":completion:*:commands" rehash 1

Вы можете узнать больше о zstyleна справочной странице zshmodule, а сами стили описаны в zshcompsys.

1
27.01.2020, 21:35

Теги

Похожие вопросы