GNU/Linux >> Znalost Linux >  >> Linux

Jak spustit příkaz vícekrát pomocí bash shell?

Ř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


Linux
  1. Jak spustit nebo opakovat příkaz Linuxu každých X sekund navždy

  2. Jak přidat více tras v Linuxu pomocí příkladů příkazů ip

  3. Jak spustit skript shellu na konzole Unix nebo terminálu Mac?

  1. [Linux] :Jak vyloučit adresář při použití příkazu shellu „tar“.

  2. Používáte hodinky k opakovanému spouštění funkce v Bash?

  3. Jak spustit příkaz Vim z shellu?

  1. Jak spustit jeden příkaz na více vzdálených systémech najednou

  2. Jak nakonfigurovat omezený Bash Shell v Linuxu

  3. Jak najdu svou verzi shellu pomocí příkazu Linux?