Команда дроссельной заслонки на OSX?

259
zyklus

Я хочу ограничить выходной сигнал grepдля запуска максимум каждые X секунд. В частности, я хочу сделать что-то вроде этого:

ping 8.8.8.8 | grep "No route to host" | throttle 3s | xargs -I % sh -c 'reset wifi' 
0
Нет, вы хотите сбросить WiFi, если ... См. [Проблема XY] (https://meta.stackexchange.com/a/66378/355310). Kamil Maciorowski 5 лет назад 1
@KamilMaciorowski - Нет, я хочу знать, как ограничить команду. Я точно знаю, какова реальная проблема и ее решение, и выкладываю проблему в 75 шагов, просто чтобы вернуться к * этому точному вопросу *, бессмысленно и трата времени каждого. Не думайте, что все не знают своих вопросов, даже не задав себе вопроса. Это просто грубо. zyklus 5 лет назад 1

1 ответ на вопрос

1
zyklus

Отвечая на мой собственный вопрос, основанный на этом вопросе, но немного измененный для OSX:

epoch () { date -v+$* "+%s" }  interval () { INTERVAL="$*" WHEN_TO_RUN=0 while read LINE; do if (( $(epoch 0S) >= $WHEN_TO_RUN )) then echo $LINE WHEN_TO_RUN="$(epoch $INTERVAL)" fi done } 

который позволяет ... | interval 3S

Выглядит разумно для меня. Но, похоже, есть проблема с синтаксисом - без точки с запятой после арифметической оценки (пара правильных паренов). Кроме того, LAST_RUN_AT не используется, и, конечно, базовая синхронизация здесь довольно грубая, детализация составляет целые секунды. Но если качество передачи отвечает потребностям поставленной задачи, посмотрите, можете ли вы принять свой собственный ответ. :-) sjnarv 5 лет назад 0
@sjnarv - если вы знаете, как получить время эпохи в мс, я обновлю его, чтобы сделать его более общим zyklus 5 лет назад 0
Нет, у меня нет решения, которое было бы легко для macOS. Если честно, я не особо выглядел, так что не воспринимайте это как окончательную информацию. Я заметил, что что-то довольно простое для Linux - получение значения «начиная с эпохи», которое включает наносекунды через что-то вроде `date +% s.% N` - просто не поддерживается в macOS (насколько я знаю, во всяком случае) , Если бы мне нужно было немного увеличить точность в интервалах в macOS, я мог бы написать немного C, который использовал бы `gettimeofday (2)`. sjnarv 5 лет назад 0