en utilisant la montre exécuter 2 commandes

42

Je dois regarder deux commandes dans les mêmes fenêtres de terminal. Je veux dire quelque chose comme

watch du -h filename.txt && df -h

Mais sa montre seulement une sortie.

Donc, ce que je pense, c'est peut-être que ce n'est pas possible d'utiliser watch pour exécuter plusieurs commandes sur la même fenêtre.

S'il y a un moyen, s'il vous plaît faites le moi savoir.

Merci.

rɑːdʒɑ
la source

Réponses:

67

Vous pouvez citer les commandes:

watch "du -h filename.txt && df -h"

Et ils seront exécutés ensemble.

Oli
la source
Merci Oli. en fait, un ordinateur de bureau sans oser faire des expériences. donc posté ici pour une solution sûre. Merci.
rɑːdʒɑ
Hé vous êtes sûr qu'ils vont travailler? erreur lors de l'exécution de l'exécution refusée "df:` / usr / raja / hostctrl / new ': autorisation refusée "
rɑːdʒɑ
Cela semble être une question distincte. Vous verriez ce problème même sans qu'il soit enveloppé dans une montre.
Oli
3
Sachez que cela fonctionne car ces exemples de commandes retournent avec true . Si la première commande retourne false, la seconde commande ne sera pas exécutée (à cause de boolean evaluation shortcut)
karatedog
3
FTR, ma commande utilise &&parce que l'OP utilise &&. La combinaison des commandes et de leurs liens est accessoire à la réponse.
Oli
19

Si vous voulez vous assurer que les deux commandes exécutent, l' un des moyens est de les séparer par au ;lieu de &&.

watch 'du -h filename.txt; df -h'

&&permet l'exécution d'une deuxième commande (deuxième opérande, à la droite de &&) uniquement si la première commande a été exécutée avec succès (état de sortie 0). Si cela est prévu comportement, aller avec &&.

Pranav Kulkarni
la source
1
Cette forme de point-virgule me semble préférable pour répondre à la question initiale. Si vous voulez "exécuter deux commandes", utilisez un point-virgule! Si vous voulez "exécuter une commande, alors peut-être une autre", utilisez && ....
JeremyDouglass
3

Par souci d'exhaustivité ...

 watch 'du -h filename.txt || true && df -h'

Le '|| true 'provoque l'évaluation de la première commande comme vraie même si elle échoue pour une raison quelconque. Cela permettra à la prochaine commande après le && de s’exécuter quelle que soit la sortie de la première. Ceci est probablement inutile pour le scénario, montrant simplement que c'est possible.

Geofferey
la source
-1

Pour que plusieurs commandes puissent être exécutées simultanément, utilisez un seul &opérateur entre les commandes. Comme:

dothis & dothat

Pour dissiper toute confusion, voici comment fonctionnent les différents opérateurs:

c1 & c2  # Run both commands parallelly
c1 ; c2  # Run both commands one by one
c1 && c2 # Run c2 only if c1 exits successfully
c1 || c2 # Run c2 only if c1 fails
Vibhum Bhardwaj
la source
c1 & c2 n'exécutera pas les deux commandes en parallèle. Si c1 réussit, seul c2 sera exécuté.
vendredi