有没有办法运行命令(例如ps aux|grep someprocess
)n次?
就像是:
run -n 10 'ps aux|grep someprocess'
我想以交互方式使用它。
更新:我之所以问这个问题是因为我确实在很多机器上工作,并且我不想将所有适应的脚本等导入到每个机器上,以便在每台机器上获得相同的功能。
答案1
我认为不存在用于此的命令或 shell 内置命令,因为它只是 Bourne shellfor
循环设计的一个简单的子集,因此自己实现这样的命令非常简单。
根据 JimB 的建议,使用 Bash 内置函数生成序列:
for i in {1..10}; do command; done
对于非常老版本的 bash,可以使用以下seq
命令:
for i in `seq 10`; do command; done
每次执行迭代十次command
- 它可以是一个管道或一系列由;
或分隔的命令&&
。您可以使用$i
变量来了解您处于哪个迭代中。
如果您认为此单行脚本,并且由于某些未指定(但可能是有效的)原因不受欢迎,您可以将其作为命令来实现,也许在您的 .bashrc 上是这样的(未经测试):
#function run
run() {
number=$1
shift
for i in `seq $number`; do
$@
done
}
用法:
run 10 command
例子:
run 5 echo 'Hello World!'
答案2
ps aux | grep someprocess
看起来您想在固定时间内观察程序的变化。Eduardo 给出了一个答案,完全回答了您的问题,但还有另一种选择:watch
:
watch 'ps aux | grep someprocess'
请注意,我将命令放在单引号中,以避免 shell 将命令解释为“run watch ps aux”并通过管道传输结果grep someprocess
。执行上一个命令的另一种方法是:
watch ps aux \| grep someprocess
默认情况下,watch
每两秒刷新一次,可以使用选项进行更改-n
。例如,如果希望间隔为 1 秒:
watch -n 1 'ps aux | grep someprocess'
答案3
只是为了好玩
pgrep ssh
!!;!!;!!;!!;!!;!!
笔记:您必须先单独运行命令pgrep ssh
,然后输入字符串!!;!!;!!;!!;!!;!!
。否则,它们!!
将被替换为先前执行的命令。
;
是命令分隔符,!!
在 bash 中重放最后一个命令。因此,这将运行pgrep ssh
并重放 6 次。
答案4
尝试这个:
yes ls | head -n5 | bash
这要求在子 shell 中执行命令,这会稍微降低性能。YMMV。基本上,您使用“yes”命令重复字符串“ls”N 次;而“head -n5”在重复 5 次时终止循环。最后一个管道将命令发送到您选择的 shell。
顺便说一句csh
,类似 shell 有一个内置repeat
命令。您可以使用它在 bash 子 shell 中执行命令!