Поиск истории и получение временного контекста с заданным размером окна

Просто дополнение к ответу Rahul Patil. Используя его ответ, я добился нужного результата следующим образом:

* * * * *  /path/of/myscript.sh
* * * * *  sleep 20s && /path/of/myscript.sh
* * * * *  sleep 40s && /path/of/myscript.sh

Это позволило мне выполнять скрипт 3 раза в минуту.

1
09.02.2019, 22:26
1 ответ

Я бы подошёл к этому со вспомогательной функцией и grep, так как (GNU )grep имеет естественный набор опций для "строк до и после совпадения". Версия с голыми -костями:

histgrep() {
  history | grep -B $2 -A $3 "$1"
}

... и вы должны использовать его точно так же, как вашу историю -поиск -контекстную команду выше:

$ histgrep jeff 1 1

  517  vi go.sh
  518  x=jeff
  519  y=/tmp
--
  832  sudo visudo
  833  sudo adduser jeff2
  834  man sudoers
--
  841  sudo ls -al /var/lib/sudo/lectured
  842  sudo rm /var/lib/sudo/lectured/jeff /var/lib/sudo/lectured/schaller
  843  sudo ls
--
  940  ls *[[:digit:]][[:digit:]][[:digit:]][[:digit:]][[:digit:]]*
  941  touch jeff߄߅߆߇߈߉.txt
  942  ls
--
 1235  histgrep a b c
 1236  histgrep jeff a 1
 1237  histgrep jeff 1 a
 1238  histgrep jeff 1 1

После добавления некоторой основной ошибки -проверка функции будет:

histgrep() {
  if [ "$#" -ne 3 ]
  then
    echo "Usage: histgrep searchterm n-before m-after"
    return
  fi
  case "$2$3" in
  (*[^0-9]*)
        echo "Usage: histgrep searchterm n-before m-after"
        return
        ;;
  esac
  history | grep -B $2 -A $3 "$1"
}

Вы могли бы легко назвать его history-search-contextвместо histgrep, если хотите:

history-search-context() {
#...
}
0
28.01.2020, 00:19

Теги

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