Řešení 1:
Nemyslím si, že pro to existuje vestavěný příkaz nebo shell, protože je to triviální podmnožina toho, co Bourne shell for
loop je navržen pro a implementace příkazu, jako je tento, je proto poměrně jednoduchá.
Podle návrhu JimB použijte pro generování sekvencí vestavěný Bash:
for i in {1..10}; do command; done
Pro velmi staré verze bash můžete použít seq
příkaz:
for i in `seq 10`; do command; done
Toto se opakuje desetkrát při spuštění command
pokaždé - může to být roura nebo řada příkazů oddělených ;
nebo &&
. Můžete použít $i
proměnnou, abyste věděli, ve které iteraci se nacházíte.
Pokud považujete tento jednořádkový skript za skript, a tak z nějakého blíže nespecifikovaného (ale možná platného) důvodu nežádoucího, můžete jej implementovat jako příkaz, možná něco takového na vašem .bashrc (netestováno):
#function run
run() {
number=$1
shift
for i in `seq $number`; do
[email protected]
done
}
Použití:
run 10 command
Příklad:
run 5 echo 'Hello World!'
Řešení 2:
ps aux | grep someprocess
vypadá to, že chcete sledovat změny programu po stanovenou dobu. Eduardo dal odpověď, která přesně odpovídá na vaši otázku, ale existuje alternativa:watch
:
watch 'ps aux | grep someprocess'
Všimněte si, že jsem příkaz vložil do jednoduchých uvozovek, aby shell interpretoval příkaz jako "spustit watch ps aux" a výsledek přenesl přes grep someprocess
. Jiný způsob, jak provést předchozí příkaz, by byl:
watch ps aux \| grep someprocess
Ve výchozím nastavení watch
obnovuje se každé dvě sekundy, což lze změnit pomocí -n
volba. Pokud například chcete mít interval 1 sekundy:
watch -n 1 'ps aux | grep someprocess'
Řešení 3:
Jen tak pro zábavu
pgrep ssh ;!!;!!;!!;!!;!!;!!
Řešení 4:
Zkuste toto:
yes ls | head -n5 | bash
To vyžaduje, aby byl příkaz proveden v dílčím prostředí, což je mírná výkonnost. YMMV. V podstatě dostanete příkaz "yes" pro opakování řetězce "ls" Nkrát; zatímco "head -n5" ukončil smyčku v 5 opakováních. Poslední roura odešle příkaz do shellu dle vašeho výběru.
Mimochodem csh
-like shelly mají vestavěný repeat
příkaz. Můžete to použít k provedení příkazu v sub-shell bash!
Řešení 5:
podobné předchozím odpovědím, ale nevyžaduje cyklus for:
seq 10 | xargs -I -- echo "hello"
roura výstup seq do xargs bez argumentů nebo voleb