Question Comment utiliser les commandes watch et jobs ensemble dans Bash?


Comment utiliser le watch commande avec jobs commande, de sorte que je puisse surveiller quand un travail de fond est terminé?

Je l'exécute comme suit, mais je n'obtiens pas le résultat des travaux:

watch jobs

Si je fais du travail seul, j'obtiens ce qui suit avec mon job de test:

jobs
[1]+  Running                 nohup cat /dev/random >/dev/null &

4
2017-08-10 17:59


origine




Réponses:


le watch la commande est documentée comme suit:

SYNOPSIS
   watch  [-dhvt]  [-n  <seconds>] [--differences[=cumulative]] [--help]
          [--interval=<sec-onds>] [--no-title] [--version] <command>
[...]
NOTE
   Note that command is given to "sh -c" which means that you may need to
   use extra quoting to get the desired effect.

La partie à propos de donner la commande à sh -c signifie le jobs commande que vous exécutez via watch est en cours d'exécution dans une session shell différente de celle qui a généré le travail, de sorte qu'il ne peut pas être vu cet autre shell. Le problème est fondamentalement que jobs est un shell intégré et doit être exécuté dans le shell qui a généré les tâches que vous souhaitez voir.

Le plus proche possible est d'utiliser une boucle while dans le shell qui a généré le travail:

$ while true; do jobs; sleep 10; done

Vous pouvez définir une fonction dans votre script de démarrage du shell pour faciliter son utilisation:

myjobwatch() { while true; do jobs; sleep 5; done; }

Ensuite, il vous suffit de taper myjobwatch.


6
2017-08-10 18:19



J'ajoute un clear. N=1; while true; do jobs; sleep ${N}; clear; done; - sabalaba


Plutôt qu'une boucle, j'ai tendance à utiliser watch avec un grep pour mon travail de course, par exemple

watch 'ps u | grep rsync'

Pas parfait mais mieux qu'une boucle :)


2
2018-01-17 13:26





Vous pouvez utiliser une boucle while et créer une fonction pour cette commande:

while true; do echo -ne "`jobs`\r"; sleep 1;  done

1
2017-08-10 18:29