Часы и w c не дают никаких результатов - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь постоянно отображать размер текущей папки, используя часы, приведенная ниже команда не работает, однако, что я делаю неправильно? Я использую zsh оболочку
$ watch ls -a | wc -l

1 Ответ

2 голосов
/ 27 февраля 2020

что я делаю не так?

Оболочка разбирает | как трубу. Поэтому, когда оболочка видит:

watch ls -a | wc -l

Она анализирует ее как две команды с выходом одной команды, перенаправленным на другую:

( watch ls -a )      |          ( wc -l )

Она запускает команду watch с двумя аргументами ls и -a и команда wc с одним аргументом -l. Поскольку watch ls -a никогда не заканчивается, а wc -l выводится только после завершения ввода, вы ничего не распечатываете. wc -l ожидает печати всех строк ввода, что никогда не происходит.

Поскольку watch внутренне вызывает оболочку, вы можете:

watch 'ls -a | wc -l'

При этом запускается одна команда watch с одним аргументом ls -a | wc -l. watch внутренне порождает оболочку и передает ей строку ls -a | wc -l. Затем эта внутренняя оболочка порождает два новых процесса ls -a и wc -l с подключенным входом / выходом.

...