с помощью команды watch run 2

42

Я должен смотреть две команды в одном окне терминала. Я имею в виду что-то вроде

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

Но это показывает только один вывод.

Так что я думаю, что может быть невозможно использовать watch для запуска нескольких команд в одном окне.

Если есть какой-либо способ, пожалуйста, дайте мне знать.

Спасибо.

rɑːdʒɑ
источник

Ответы:

67

Вы можете процитировать команды:

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

И они будут казнены вместе.

Оли
источник
Спасибо Оли. на самом деле офисные ПК так не решаются делать эксперименты. поэтому выложил здесь наверняка решение. Спасибо.
rɑːdʒɑ
Эй, ты уверен, что они будут работать? потому что при выполнении я получаю сообщение об ошибке «Отказано в разрешении»: «df:` / usr / raja / hostctrl / new »: Отказано в разрешении»
rɑːdʒɑ
Кажется, это отдельная проблема. Вы бы увидели этот выпуск даже без того, чтобы обернуть его в часы.
Оли
3
Имейте в виду, что это работает, потому что эти примеры команд возвращаются с истиной . Если первая команда вернет false, вторая команда не будет выполнена (из-за boolean evaluation shortcut)
karatedog
3
FTR, моя команда использует, &&потому что OP использует &&. Комбинация команд и их связывание несущественны для ответа.
Оли
19

Если вы хотите убедиться, что обе команды выполняются, один из способов - разделить их ;вместо &&.

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

&&разрешает выполнение второй команды (второй операнд, справа от &&) только в том случае, если первая команда выполнена успешно (состояние выхода 0). Если это намеренное поведение, иди с &&.

Пранав Кулькарни
источник
1
Эта точка с запятой кажется мне лучшим ответом на оригинальный вопрос. Если вы хотите «запустить две команды», используйте точку с запятой! Если вы хотите «запустить одну команду, то, возможно, другую», используйте && ....
JeremyDouglass
3

Ради полноты ...

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

'|| true 'part заставляет первую команду оцениваться как true, даже если по какой-то причине она не работает. Это позволит выполнить следующую команду после && независимо от вывода first. Это, скорее всего, не нужно для сценария, просто показывает, что это возможно.

Geofferey
источник
-1

Для одновременного запуска нескольких команд используйте один &оператор между командами. Подобно:

dothis & dothat

Чтобы избежать путаницы, вот как работают разные операторы:

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
источник
c1 и c2 не будут запускать обе команды параллельно, если c1 успешен, то будет выполняться только c2.
rɑːdʒɑ