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.