4 votes

Échec du script script de Bash utilisant 'watch'. Pourquoi ?

Je dois exécuter de manière répétée (toutes les 3600 secondes) les commandes suivantes à partir du terminal :

if whois abcxyz.com | grep -q 'string'; then
    echo 'Message line 1'
    echo 'Message line 2'
fi

J'ai essayé d'utiliser watch, comme suit :

watch -n 3600 if whois abcxyz.com | grep -q 'string'; then
    echo 'Message line 1'
    echo 'Message line 2'
fi

mais je reçois des messages d'erreur.

Pourriez-vous m'aider à le faire fonctionner ?

Remerciements

13voto

steeldriver Points 118154

Desde watch [options] command exécute command en utilisant sh -c par défaut, vous peut l'utiliser pour exécuter des extraits de code Shell directement fournis :

  1. vous obtenez le bon devis

y

  1. votre code est compatible avec sh, c'est-à-dire qu'il n'utilise aucun "isme" bash/zsh/csh

Ainsi, par exemple

$ watch -n 36 'if whois abcxyz.com | grep -q "string"; then
  echo "Message line 1" | ts
  echo "Message line 2" | ts
fi'

9voto

waltinator Points 32821

watch est documenté (en man watch ) comme :

watch [options] command

Il s'agit d'une simple commande, et non d'une expression de commande complète,
Vous devez donc envelopper votre commande dans un fichier bash script, et watch que.

Par exemple,

En $HOME/bin/foo :

#!/bin/bash
if whois abcxyz.com | grep -q 'string'; then
    echo 'Message line 1'
else
    echo 'Message line 2'
fi

Ensuite, après avoir fait foo exécutable avec chmod +x $HOME/bin/foo ,

watch -n 3600 $HOME/bin/foo

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X