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éponses:


67

Vous pouvez citer les commandes:

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

Et ils seront exécutés ensemble.


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 &&.


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.


-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

c1 & c2 n'exécutera pas les deux commandes en parallèle. Si c1 réussit, seul c2 sera exécuté.
— vendredi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.