Есть две основные категории команд watch
(из тех, которые должны запускать команды периодически, watch
не стандартная команда, есть даже системы, в которых watch
делает что-то совершенно другое, например отслеживание другой линии tty во FreeBSD).
Тот, который уже передает конкатенацию своих аргументов с пробелами в оболочку (фактически вызывает sh -c
), а другой просто выполняет команду, указанную с аргументы указаны без вызова оболочки.
Вы находитесь в первой ситуации, поэтому вам просто нужно:
watch 'ls /tmp/|wc -l'
Когда вы это сделаете:
watch sh -c 'ls /tmp/|wc -l'
ваши часы
на самом деле запускают:
sh -c 'sh -c ls /tmp/|wc -l'
И sh -c ls / tmp /
запускает встроенный скрипт ls
, где $ 0
равно / tmp /
(поэтому ls
запускается без аргументов и перечисляет Текущий каталог).
Некоторые из реализаций watch
в первой категории (например, из procps-ng в Linux) принимают параметр -x
, чтобы они вели себя как часы
второй категории. Таким образом, там вы можете сделать:
watch -x sh -c 'ls /tmp/|wc -l'
Ответ заключается в том, что в настоящее время это невозможно сделать. Команды задержки sleep/--— ваши единственные возможные обходные пути, если вы продолжите делать это таким образом.
Единственный способ полностью и надежно автоматизировать процесс — это
Быстрый поиск в Google покажет вам, что для visipics 2 предполагается поддержка этого в профессиональной версии в соответствии с его концепцией, однако, поскольку она еще не разработана, и прошло около 8 лет с тех пор, как для нее были сделаны планы, маловероятно, что мы увидим это в ближайшее время.
Таким образом, у вас остается только возможность либо довольствоваться тем, что у вас есть прямо сейчас, и продолжать использовать спящий режим, либо переключиться на другой инструмент, например dupeGuru или fslint.