Вы могли использовать ожидать инструмент для запущения программ в VM. expect
программа, которая использует Tcl, поскольку это - язык сценариев и расширяет язык немного. Это было долго, так как я использовал expect
, но я вспоминаю это являющийся небольшим inobvious до, как получить некоторые вещи произойти. Это действительно имело возможность случайного интервала синхронизации "ввода" сделанного моделируемым человеком, таким образом, это может быть, что Вы хотите.
Определение POSIX найти
-exec имя_утилиты [аргумент ...] {} + как:
Окончание первичного выражения должно быть препиначено точкой с запятой. или с помощью <плюс-знака>. Только
, который следует сразу за аргумент, содержащий только два символа "{}", должен содержать знаки "{}". конец первичного выражения. Другие виды использования не должны рассматриваться как особенный. Если первичное выражение пунктуатировано < точка с запятой>, утилита utility_name должна вызываться один раз для каждой патнан и первичный должны быть оценены как истинные, если утилита возвращает нулевое значение как статус выхода. Имя_утилиты или аргумент , содержащий только два символа "{}" должны быть заменены на текущий Отчество. Если строка utility_name или argument содержит два параметра иероглифы "{}", но не просто два иероглифа "{}", а определяет, заменит ли эти два символа или же использует строку без изменений. Если первичное выражение препинается знаком
, то первичное выражение всегда будут оцениваться как истинные, и отчество, для которого первичное оценивается в совокупности. Имя_утилиты utility_name. вызывается один раз для каждого набора обобщенных отчеств. Каждый Зазыв должен начинаться после того, как последним именем в наборе будет обобщены и должны быть завершены до того, как найдет выходы из коммунальных служб, и до того, как первый путь в следующем наборе (если таковой имеется) будет объединен за этот первичный, но в остальном не определено, будет ли вызов происходит до, во время или после оценки других праймериз. Если любой вызов возвращает ненулевое значение в качестве состояния выхода, find. утилита должна вернуть ненулевой статус выхода. Аргумент, содержащий только два символа "{}" должны быть заменены на набор из агрегированные патнамы, каждый из которых передается в качестве отдельного аргумента. к вызываемой утилите в том же порядке, в котором она была объединена. размер любого набора из двух или более отчеств должен быть ограничен таким образом, чтобы выполнение утилиты не приводит к ограничению системы {ARG_MAX} превысить . Если более одного аргумента, содержащего два Символы "{}" присутствуют, поведение не определено.
Если найденный набор длины имени файла превышает системный ARG_MAX
, команда выполняется.
Вы можете получить ARG_MAX
, используя getconf:
$ getconf ARG_MAX
2097152
На некоторых системах фактическое значение ARG_MAX
может отличаться, для получения более подробной информации обратитесь к здесь .
В POSIX-системе существует максимальная длина списка аргументов для нового процесса. find
разбивает выполнение, если пути к файлам длиннее этого. Чтобы увидеть ограничение на Linux, используйте xargs --show-limits
(не работайте в Mac OS, если кто-то знает лучшую альтернативу, пожалуйста, прокомментируйте здесь)
edit: украдено прямо из ответа Gnouc, POSIX способ получить максимальную длину списка аргументов - getconf ARG_MAX
. Однако, я провел эксперимент на своей машине mac os, и похоже, что find
использует чуть больше половины этого числа. Это согласуется с тем, что на системе, где она работает, xargs --show-limits
говорит нам, что она не будет использовать максимальную длину аргумента (в данном случае она также будет использовать около половины этого числа), однако я не смог найти объяснения этому.
edit 2: кажется, что единственный надежный способ определить, сколько параметров find
будет слипаться для каждого вызова - это экспериментировать, например, запуская
find / -exec echo {} + | wc -cl
Так как выход из find
имеет строку для каждого вызова echo
, их можно сосчитать, используя wc -l
. Общее количество байтов echo
ed является выходом wc -c
вместо этого. Делясь один на другой, Вы получаете среднее количество байт в параметрах для каждого вызова команды (хотя и немного меньшее значение, из-за округления, примерно половину средней длины пути в Вашей системе)