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


42

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

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

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

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

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

Спасибо.

Ответы:


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. Это, скорее всего, не нужно для сценария, просто показывает, что это возможно.


-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

c1 и c2 не будут запускать обе команды параллельно, если c1 успешен, то будет выполняться только c2.
— rɑːdʒɑ
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.