usando i comandi watch run 2


42

Devo fare due comandi nelle stesse finestre del terminale. Intendo qualcosa del genere

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

Ma mostra solo un output.

Quindi quello che sto pensando è che potrebbe non essere possibile usare watch per eseguire più comandi nella stessa finestra.

Se c'è un modo, per favore fatemelo sapere.

Grazie.

Risposte:


67

Puoi citare i comandi:

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

E saranno giustiziati insieme.


Grazie Oli. in realtà PC da ufficio, quindi non osare fare esperimenti. così pubblicato qui per una soluzione sicura. Grazie.
rʒɑdʒɑ

Ehi, sei sicuro che funzioneranno? perché quando eseguo ricevo un errore negato l'autorizzazione "df:` / usr / raja / hostctrl / new ': Autorizzazione negata "
rɑːdʒɑ

Sembra essere un problema separato. Vedresti quel problema anche senza essere avvolto nell'orologio.
Oli

3
Ricorda che funziona perché quei comandi di esempio ritornano con true . Se il primo comando restituisce false, il secondo comando non verrebbe eseguito (a causa di boolean evaluation shortcut)
karatedog

3
FTR, il mio comando utilizza &&perché utilizza l'OP &&. La combinazione di comandi e il loro collegamento è secondario alla risposta.
Oli

19

Se vuoi assicurarti che entrambi i comandi vengano eseguiti, uno dei modi è separarli con ;invece di &&.

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

&&consente l'esecuzione del secondo comando (secondo operando, a destra di &&) solo se il primo comando è stato eseguito correttamente (stato di uscita 0). Se si tratta di un comportamento previsto, procedere con &&.


1
Questa forma di punto e virgola mi sembra migliore come risposta alla domanda originale. Se vuoi "eseguire due comandi", usa un punto e virgola! Se vuoi "eseguire un comando, quindi forse un altro" usa && ....
JeremyDouglass,

3

Per completezza ...

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

Il "|| true 'parte fa sì che il primo comando valuti come vero anche se fallisce per qualche motivo. Ciò consentirà l'esecuzione del comando successivo dopo && indipendentemente dall'output di prima. Molto probabilmente questo non è necessario per lo scenario, dimostrandolo solo possibile.


-1

Per eseguire più comandi contemporaneamente, utilizzare un singolo &operatore tra i comandi. Piace:

dothis & dothat

Per eliminare qualsiasi confusione, ecco come funzionano diversi operatori:

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 e c2 non eseguiranno entrambi i comandi in parallelo, se c1 ha esito positivo, verrà eseguito solo c2.
rɑːdʒɑ
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.