Com zsh e desde que a última linha de comando tenha sido apenas um comando ou pipeline ou e-or list (por exemplo, echo x , echo x | tr x y , echo x && echo y , até comandos compostos como { x; y; } ou for / while loops mas não echo x; echo y ):
repeat 30 !!
Para repetir a linha de comando anterior, mesmo que contenha vários comandos, use:
repeat 30 do !!; done
Ou:
repeat 30 {!!}
Com bash e apenas para comandos simples (entre os exemplos acima, apenas o caso echo x ), você pode definir uma função auxiliar como:
repeat() {
local n="$1"
shift
while ((n-- > 0)); do
"$@"
done
}
(e use repeat 30 !! como acima). Um efeito colateral é que, como o código estará sendo executado em uma função, ele verá diferentes "$@" , "$#" e coisas como typeset funcionarão de forma diferente, então você não pode fazer coisas como:
eval 'echo "$1"'
repeat 30 !!
Outra abordagem para emular zsh do repeat 30 {!!} seria declarar um alias como:
alias repeat='for i in $(seq'
(assumindo uma $IFS não modificada)
E, em seguida, use:
repeat 30); { !!; }