有没有办法运行命令(例如ps aux|grep someprocess)n次?
就像是:
run -n 10 'ps aux|grep someprocess'
Run Code Online (Sandbox Code Playgroud)
我想以交互方式使用它。
更新:我问这个问题的原因是,我确实在很多机器上工作,我不想将我所有的改编脚本等导入到每个盒子中以在每台机器上获得相同的功能。
Edu*_*nec 278
我不认为存在用于此的命令或 shell 内置命令,因为它是 Bourne shellfor循环设计的一个微不足道的子集,因此自己实现这样的命令非常简单。
根据 JimB 的建议,使用 Bash 内置来生成序列:
for i in {1..10}; do command; done
Run Code Online (Sandbox Code Playgroud)
对于非常旧版本的 bash,您可以使用以下seq命令:
for i in `seq 10`; do command; done
Run Code Online (Sandbox Code Playgroud)
command每次执行十次迭代- 它可以是一个管道或一系列由;或分隔的命令&&。您可以使用该$i变量来了解您所在的迭代。
如果您将此单行脚本视为脚本,因此出于某些未指定(但可能有效)的原因,您可以将其作为命令来实现,也许在您的 .bashrc 上是这样的(未经测试):
#function run
run() {
number=$1
shift
for i in `seq $number`; do
$@
done
}
Run Code Online (Sandbox Code Playgroud)
用法:
run 10 command
Run Code Online (Sandbox Code Playgroud)
例子:
run 5 echo 'Hello World!'
Run Code Online (Sandbox Code Playgroud)
Lek*_*eyn 39
ps aux | grep someprocess看起来您想在固定时间内观看节目的变化。Eduardo 给出的答案准确地回答了您的问题,但还有一个替代方案watch:
watch 'ps aux | grep someprocess'
Run Code Online (Sandbox Code Playgroud)
请注意,我已将命令放在单引号中,以避免 shell 将命令解释为“run watch ps aux”并将结果通过grep someprocess. 执行上一个命令的另一种方法是:
watch ps aux \| grep someprocess
Run Code Online (Sandbox Code Playgroud)
默认情况下,watch每两秒刷新一次,可以使用该-n选项进行更改。例如,如果想要间隔 1 秒:
watch -n 1 'ps aux | grep someprocess'
Run Code Online (Sandbox Code Playgroud)
小智 27
只是为了好玩
pgrep ssh ;!!;!!;!!;!!;!!;!!
Run Code Online (Sandbox Code Playgroud)
;是一个命令分隔符,并!!在 bash 中重放最后一个命令。所以这会运行pgrep ssh,然后重播 6 次。
小智 20
与之前的回复类似,但不需要 for 循环:
seq 10 | xargs -I -- echo "hello"
Run Code Online (Sandbox Code Playgroud)
seq 的管道输出到 xargs 没有参数或选项
小智 17
尝试这个:
yes ls | head -n5 | bash
Run Code Online (Sandbox Code Playgroud)
这需要在子 shell 中执行命令,这是一个轻微的性能损失。天啊。基本上,你得到“yes”命令来重复字符串“ls”N次;而“head -n5”在重复 5 次时终止循环。最后一个管道将命令发送到您选择的 shell。
顺便说一句csh- 类似 shell 有一个内置repeat命令。您可以使用它在 bash 子 shell 中执行您的命令!
POSIX方式
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04_01
x=10
while [ $x -gt 0 ]; do
command
x=$(($x-1))
done
Run Code Online (Sandbox Code Playgroud)
这当然可以制成单衬:
x=10; while [ $x -gt 0 ]; do command; x=$(($x-1)); done
Run Code Online (Sandbox Code Playgroud)
并且似乎是最便携的方式,因此不太可能让您安装程序。
以下是不太便携的:
{1..10}:特定于 bash,如果参数很大,将生成一个巨大的行seq: GNUyes: GNU如果您厌倦了可移植性,请考虑 GNU parallel:
sudo apt-get install parallel
seq 100 | parallel echo {}
Run Code Online (Sandbox Code Playgroud)
它并行运行命令并有许多很酷的选项。
另见:https : //stackoverflow.com/questions/169511/how-do-i-iterate-over-a-range-of-numbers-defined-by-variables-in-bash
在 macOS 上,您可以使用该repeat命令。
repeat 10 ps aux | grep someprocess
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
262776 次 |
| 最近记录: |