Existe-t-il un moyen d'exécuter une commande (par exemple ps aux|grep someprocess
) pendant n fois?
Quelque chose comme:
run -n 10 'ps aux|grep someprocess'
Je veux l'utiliser de manière interactive, veuillez ne pas poster de scripts.
Mise à jour: La raison pour laquelle je pose cette question est que je travaille sur de nombreuses machines et que je ne souhaite pas importer tous les scripts adaptés, etc., dans chaque boîte pour que les mêmes fonctionnalités soient appliquées à toutes les machines.
Réponses:
Je ne pense pas qu'il existe une commande ou un shell intégré, car il s'agit d'un sous-ensemble trivial de la
for
conception de la boucle du shell Bourne . Il est donc très simple de mettre en œuvre une telle commande.Pour commencer, vous pouvez utiliser une
for
boucle factice :Ou, de manière équivalente, selon la suggestion de JimB, en utilisant Bash intégré pour générer des séquences:
Cela s'exécute dix fois à
command
chaque exécution - il peut s'agir d'un tuyau ou d'une série de commandes séparées par;
ou&&
. Vous pouvez utiliser la$i
variable pour savoir à quelle itération vous appartenez.Si vous considérez cela comme un script et que, pour une raison non spécifiée (mais peut-être valide), vous pouvez l'implémenter en tant que commande, par exemple, sur votre .bashrc (non testé):
Usage:
Exemple:
la source
for
est le bash intégré pour les itérations.seq
{1..10}
.bashrc
si elle{1..$number}
est remplacée par celle-ci`seq $number`
.ps aux | grep someprocess
on dirait que vous voulez regarder les changements d'un programme pendant un temps fixe. Eduardo a donné une réponse qui répond à votre question avec précision, mais il existe une alternativewatch
:Notez que j'ai mis la commande entre guillemets pour éviter que le shell n'interprète la commande comme "exécutez watch ps aux" et dirige le résultat
grep someprocess
. Une autre façon de faire la commande précédente serait:Par défaut, une
watch
actualisation toutes les deux secondes peut être modifiée à l'aide de l'-n
option. Par exemple, si vous voulez avoir un intervalle de 1 seconde:la source
Juste pour le fun
la source
for
semble être la meilleure solution. En tout cas merci pour la réponse.cmd ;!!
Sur une ligne, ne répétez- vous pas simplement la commande entrée avant la ligne actuelle? Il faudrait deuxhistory
entrées distinctes .;
par&&
pour vous arrêter au premier échec.semblable aux réponses précédentes, mais ne nécessite pas la boucle for:
diriger la sortie de seq vers xargs sans arguments ni options
la source
echo "hello" 1 2 3 4 5 6 7 8 9 10
. Vous devez exécuter xargs avec-n 1
pour un processus pour chaque entrée (nombre) et avec-P 10
pour une exécution en parallèle (10 processus parallèles). En finissant avecseq 10 | xargs -n 1 -P 10 echo
.Essaye ça:
Cela nécessite que la commande soit exécutée dans un sous-shell, ce qui représente un léger inconvénient. YMMV. En gros, vous obtenez la commande "oui" pour répéter la chaîne "ls" N fois; tandis que "head -n5" termine la boucle à 5 répétitions. Le dernier canal envoie la commande au shell de votre choix.
Incidemment, les
csh
coquilles ont unerepeat
commande intégrée . Vous pouvez l'utiliser pour exécuter votre commande dans un sous-shell bash!la source
Manière POSIX
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04_01
qui pourrait bien sûr être transformé en une ligne:
et semble être le moyen le plus portable, et donc moins susceptible de vous faire installer des programmes.
Les éléments suivants sont moins portables:
{1..10}
: spécifique à bash, et générera une énorme ligne si l'argument est grandseq
: GNUyes
: GNUEt si vous en avez assez de la portabilité, considérez GNU
parallel
:qui exécute des commandes en parallèle et a de nombreuses options intéressantes.
Voir aussi: https://stackoverflow.com/questions/169511/how-do-i-iterate-over-a-range-of-numbers-defined-by-variables-in-bash
la source
sh, zsh, ksh
, etbash
sont tous bien supportés sur la plupart des plateformes.csh, tcsh, fish
a un peu de soutien. L' utilisation queparallel --embed
vous pouvez même créer un script qui peut facilement être déplacé vers un autre système qui ne dispose pas de parallèle GNU installé.Une mise en œuvre de la coquille de poisson de @ de-eduardo Ivanec
run
fonction ci - dessusla source
Ce serait 'regarder' - devrait faire partie de presque tous les systèmes Unix utilisant procps
Vous pouvez voir les changements de fs ou les mouvements intéressants dans un système. Par exemple,
Il suffit de mettre vos commandes en argument (voir
man watch
)la source
Sur macOS, vous pouvez utiliser la
repeat
commande.la source