Commande déroutée sur OSX?

0

Je veux limiter la sortie de grepfonctionner au maximum toutes les X secondes. Plus précisément, je veux faire quelque chose comme ceci:

ping 8.8.8.8 | grep "No route to host" | throttle 3s | xargs -I % sh -c 'reset wifi'
Zyklus
la source
1
Non, vous voulez réinitialiser le WiFi si ... Voir le problème XY .
Kamil Maciorowski
1
@ KamilMaciorowski - Non, je veux savoir comment étrangler une commande. Je sais exactement quel est le problème et la solution réelle et exposer le problème en 75 étapes juste pour être ramené à cette question exacte est inutile et représente une perte de temps pour tout le monde. Ne présumez pas que chacun ignore ses propres questions sans même se poser de question. C'est juste grossier.
Zyklus

Réponses:

2

Répondant à ma propre question, basée sur cette question , mais légèrement modifiée pour 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
}

ce qui permet ... | interval 3S

Zyklus
la source
Cela me semble raisonnable. Mais il semble y avoir un problème de syntaxe - pas de point-virgule après l'évaluation arithmétique (la paire de parenté droite). De plus, LAST_RUN_AT n’est pas utilisé et, bien entendu, le minutage de base est assez grossier, la granularité étant une seconde entière. Mais si la qualité de la transmission répond au besoin de la tâche à accomplir, voyez si vous pouvez accepter votre propre réponse. :-)
samedi
@sjnarv - Si vous savez comment obtenir le temps d'une époque en ms, je le mettrai à jour pour le rendre plus générique
zyklus
Non, je n'ai pas de solution qui serait facile pour macOS. Pour être juste, je n'ai pas beaucoup regardé, alors ne prenez pas cette information comme définitive. J'ai remarqué que quelque chose d'assez facile pour Linux - extraire une valeur "depuis l'époque" qui inclut des nanosecondes via quelque chose du genre date +%s.%N- n'est tout simplement pas supporté par macOS (pour autant que je sache, de toute façon). Si j'avais besoin d'un peu plus de précision sur les intervalles de macOS, je pourrais écrire un peu de C qui l'utilisait gettimeofday(2).
Sjnarv