Есть ли способ выполнить команду (например ps aux|grep someprocess
) для n раз?
Что-то вроде:
run -n 10 'ps aux|grep someprocess'
Я хочу использовать его в интерактивном режиме, пожалуйста, не размещайте сценарии.
Обновление: причина, по которой я спрашиваю об этом, заключается в том, что я работаю на многих машинах и не хочу импортировать все свои адаптированные сценарии и т. Д. В каждую коробку, чтобы получить одинаковую функциональность на каждой машине.
Ответы:
Я не думаю, что встроенная команда или оболочка для этого существует, поскольку это тривиальное подмножество того, для чего
for
предназначен цикл оболочки Борна, и поэтому реализация такой команды сама по себе довольно проста.Для начала вы можете использовать фиктивный
for
цикл:Или эквивалентно согласно предложению JimB, используя встроенную функцию Bash для генерации последовательностей:
Это повторяется десять раз, выполняя
command
каждый раз - это может быть конвейер или серия команд, разделенных;
или&&
. Вы можете использовать$i
переменную, чтобы узнать, в какой итерации вы находитесь.Если вы считаете этот однострочный сценарий и по какой-то неуказанной (но, возможно, действительной) причине нежелательным, вы можете реализовать его как команду, возможно, что-то вроде этого в вашем .bashrc (не проверено):
Использование:
Пример:
источник
for
это Баш встроенный для итерации.seq
:{1..10}
.bashrc
если{1..$number}
обменять на`seq $number`
хотя.ps aux | grep someprocess
Похоже, вы хотите наблюдать за изменениями программы в течение фиксированного времени. Эдуардо дал ответ, который точно отвечает на ваш вопрос, но есть альтернативаwatch
:Обратите внимание, что я поместил команду в одинарные кавычки, чтобы оболочка не интерпретировала команду как «run watch ps aux» и не передавала результат
grep someprocess
. Другой способ выполнить предыдущую команду:По умолчанию
watch
обновляется каждые две секунды, что можно изменить с помощью-n
параметра. Например, если хотите иметь интервал в 1 секунду:источник
Просто для удовольствия
источник
for
кажется лучшим способом. В любом случае спасибо за ответ.cmd ;!!
в одной ли строке просто повторить команду, введенную перед текущей строкой? Это должны быть две отдельныеhistory
записи.;
на,&&
чтобы остановить при первом сбое.похож на предыдущие ответы, но не требует цикла for:
конвейерный вывод seq to xargs без аргументов или опций
источник
echo "hello" 1 2 3 4 5 6 7 8 9 10
. Вам необходимо запустить xargs с-n 1
для одного процесса для каждого ввода (число) и с-P 10
для параллельного выполнения (10 параллельных процессов). Заканчивая сseq 10 | xargs -n 1 -P 10 echo
.Попробуй это:
Это требует выполнения команды в под-оболочке, небольшое снижение производительности. YMMV. По сути, вы получаете команду «yes» для повторения строки «ls» N раз; в то время как "head -n5" завершил цикл на 5 повторений. Последний канал отправляет команду в оболочку по вашему выбору.
Между прочим,
csh
как у снарядов есть встроеннаяrepeat
команда. Вы можете использовать это для выполнения вашей команды в под-оболочке bash!источник
Способ POSIX
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04_01
который, конечно, может быть превращен в один вкладыш:
и, кажется, самый переносимый способ, и, следовательно, менее вероятно, заставит вас устанавливать программы.
Следующие менее переносимы:
{1..10}
: специфично для bash, и генерирует огромную строку, если аргумент большойseq
: GNUyes
: GNUИ если вы устали от переносимости, рассмотрите GNU
parallel
:который запускает команды параллельно и имеет много интересных опций.
Смотрите также: https://stackoverflow.com/questions/169511/how-do-i-iterate-over-a-range-of-numbers-defined-by-variables-in-bash
источник
sh, zsh, ksh
иbash
все они хорошо поддерживаются на большинстве платформ.csh, tcsh, fish
имеет некоторую поддержку. Используя его,parallel --embed
вы даже можете создать скрипт, который можно легко переместить в другую систему, в которой не установлен GNU Parallel.Реализация рыбы оболочки @ Eduardo-Ivanec в
run
функции вышеисточник
Это было бы «смотреть» - должно быть частью почти любой Unix-системы, использующей procps
Вы можете увидеть изменения фс или другие интересные движения в системе. Например,
Просто поместите ваши команды в качестве аргумента (см.
man watch
)источник
В macOS вы можете использовать
repeat
команду.источник