za pomocą zegarka uruchom 2 polecenia

42

Muszę oglądać dwa polecenia w tym samym oknie terminala. Mam na myśli coś takiego

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

Ale pokazuje tylko jeden wynik.

Myślę, że może nie być możliwe użycie funkcji watch do uruchamiania wielu poleceń w tym samym oknie.

Jeśli istnieje jakikolwiek sposób, daj mi znać.

Dziękuję Ci.

rɑːdʒɑ
źródło

Odpowiedzi:

67

Możesz zacytować polecenia:

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

I zostaną straceni razem.

Oli
źródło
Dzięki Oli. właściwie komputer biurowy, więc nie odważę się eksperymentować. więc zamieszczono tutaj pewne rozwiązanie. Dziękuję Ci.
rɑːdʒɑ
Hej, jesteś pewien, że będą działać? ponieważ podczas wykonywania pojawia się błąd odmowy uprawnień „df:` / usr / raja / hostctrl / new ': Permission denied ”
rɑːdʒɑ
To wydaje się być osobną kwestią. Zobaczysz ten problem, nawet bez owinięcia go w zegarek.
Oli
3
Pamiętaj, że to działa, ponieważ te przykładowe polecenia zwracają wartość true . Jeśli pierwsze polecenie zwróci wartość false, drugie polecenie nie zostanie wykonane (z powodu boolean evaluation shortcut)
karatedog
3
FTR, moje polecenie używa, &&ponieważ używa OP &&. Kombinacja poleceń i ich łączenie jest przypadkowa w stosunku do odpowiedzi.
Oli
19

Jeśli chcesz mieć pewność, że oba polecenia zostaną wykonane, jednym ze sposobów jest oddzielenie ich ;zamiast &&.

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

&&umożliwia wykonanie drugiego polecenia (drugi argument po prawej stronie &&) tylko wtedy, gdy pierwsze polecenie zostało wykonane pomyślnie (status wyjścia 0). Jeśli jest to zamierzone zachowanie, idź z &&.

Pranav Kulkarni
źródło
1
Ta forma średnika wydaje mi się najlepszą odpowiedzią na pierwotne pytanie. Jeśli chcesz „uruchomić dwa polecenia”, użyj średnika! Jeśli chcesz „uruchomić jedno polecenie, a może kolejne” użyj && ....
JeremyDouglass
3

Dla kompletności ...

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

„|| „prawda” powoduje, że pierwsze polecenie jest oceniane jako prawdziwe, nawet jeśli z jakiegoś powodu nie powiedzie się. Umożliwi to wykonanie następnego polecenia po && bez względu na wynik pierwszego. Jest to najprawdopodobniej niepotrzebne w przypadku tego scenariusza, po prostu pokazując, że jest to możliwe.

Geofferey
źródło
-1

Aby uruchomić wiele poleceń jednocześnie, użyj jednego &operatora między poleceniami. Lubić:

dothis & dothat

Aby usunąć wszelkie nieporozumienia, oto jak działają różni operatorzy:

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
źródło
c1 i c2 nie uruchomią obu poleceń równolegle, jeśli c1 zakończy się powodzeniem, uruchomi się tylko c2.
rɑːdʒɑ