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); { !!; }