Tyl*_*den 9 command-line bash command-history
没有写一个循环,有没有办法将最后一个命令重复 N 次。
例如,我可以使用双 bang (!!) 重复最后一个命令一次,但是我如何重复它说 30 次?
Sté*_*las 12
使用zsh, 并提供最后一个命令行只是一个命令或管道或 and-or 列表(例如echo x,echo 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)
我能想到的最短的是:
date # or whatever command
for i in {1..30}; do !!; done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5390 次 |
| 最近记录: |