重复上一个命令 N 次

Tyl*_*den 9 command-line bash command-history

没有写一个循环,有没有办法将最后一个命令重复 N 次。

例如,我可以使用双 bang (!!) 重复最后一个命令一次,但是我如何重复它说 30 次?

Sté*_*las 12

使用zsh, 并提供最后一个命令行只是一个命令或管道或 and-or 列表(例如echo xecho x | tr x y, echo x && echo y,甚至复合命令,如{ x; y; }or for/ whileloops 但不是echo x; echo y):

repeat 30 !!
Run Code Online (Sandbox Code Playgroud)

要重复上一个命令行,即使它包含多个命令,请使用:

repeat 30 do !!; done
Run Code Online (Sandbox Code Playgroud)

或者:

repeat 30 {!!}
Run Code Online (Sandbox Code Playgroud)

随着bash和简单的命令只(以上,只有在这些例子中echo x的情况下),你可以定义一个辅助函数,如:

repeat() {
  local n="$1"
  shift
  while ((n-- > 0)); do
    "$@"
  done
}
Run Code Online (Sandbox Code Playgroud)

(并repeat 30 !!像上面一样使用)。一个副作用是,因为代码将在一个函数中运行,它会看到不同的"$@""$#"并且像这样的事情typeset会以不同的方式工作,所以你不能做这样的事情:

eval 'echo "$1"'
repeat 30 !!
Run Code Online (Sandbox Code Playgroud)

另一种模拟zsh's 的repeat 30 {!!}方法是声明一个别名,如:

alias repeat='for i in $(seq'
Run Code Online (Sandbox Code Playgroud)

(假设未修改$IFS

然后使用:

repeat 30); { !!; }
Run Code Online (Sandbox Code Playgroud)


Jef*_*ler 9

我能想到的最短的是:

date # or whatever command
for i in {1..30}; do !!; done
Run Code Online (Sandbox Code Playgroud)

  • 您可以将其缩短为 `for i in {1..30};{ !!;}` (5认同)
  • 那有一个循环。 (2认同)