有没有办法运行一个命令(例如ps aux|grep someprocess
) n次?
就像是:
run -n 10 'ps aux|grep someprocess'
我想交互使用它,请不要发布脚本。
更新:我问这个问题的原因是,我在很多机器上工作,而且我不想将所有的脚本等导入到每个机器中,以便在每台机器上获得相同的function。
我不认为这个命令或shell内置的存在,因为它是Bourne shell for
循环所devise的一个简单的子集,因此你自己实现一个这样的命令是非常简单的。
对于初学者,你可以使用一个虚拟for
循环:
for i in `seq 10`; do command; done
或者等同于JimB的build议,使用Bash内build生成序列:
for i in {1..10}; do command; done
每次执行十次执行command
– 它可以是一个pipe道或一系列由之隔开的命令;
或&&
。 你可以使用$i
variables来知道你在哪个迭代中。
如果你认为这是一个脚本,所以对于一些不确定的(但也许是有效的)理由是不可取的,你可以把它作为一个命令来实现,也许在你的.bashrc(未经testing)中这样做:
#function run run() { number=$1 shift for i in `seq $number`; do $@ done }
用法:
run 10 command
例:
run 5 echo 'Hello World!'
ps aux | grep someprocess
ps aux | grep someprocess
看起来像你想观看一个固定的时间程序的变化。 爱德华多给出了一个答案,完全回答你的问题,但有一个select: watch
:
watch 'ps aux | grep someprocess'
请注意,我已经把这个命令放在避免shell将命令解释为“运行监视ps aux and pipe the result through
grep someprocess来pipe理and pipe the result through
地方。另一种执行前面命令的方法是:
watch ps aux \| grep someprocess
默认情况下,每两秒钟刷新一次,可以使用-n
选项进行更改。 比如,如果要间隔1秒:
watch -n 1 'ps aux | grep someprocess'
只是为了好玩
pgrep ssh ;!!;!!;!!;!!;!!;!!
尝试这个:
yes ls | head -n5 | bash
这要求命令在一个子shell中执行,性能会受到一点损失。 因人而异。 基本上,你得到“是”命令重复string“ls”N次; 而“head -n5”以5次重复结束循环。 最后一个pipe道将命令发送到您select的shell。
顺便说一下,类似csh
的shell有一个内置的repeat
命令。 你可以用它在bash子shell中执行你的命令!
类似于以前的回复,但不需要for循环:
seq 10 | xargs -I -- echo "hello"
pipe道输出seq到没有参数或选项的xargs
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
这当然可以做成一个class轮:
x=10; while [ $x -gt 0 ]; do command; x=$(($x-1)); done
似乎是最便携的方式,因此不太可能让你安装程序。
以下便携性较差:
{1..10}
:bash特定的,如果参数很大,会产生一个巨大的行 seq
:GNU yes
:GNU 如果您厌倦了可移植性,请考虑GNU parallel
:
sudo apt-get install parallel seq 100 | parallel echo {}
它并行运行命令,并有许多很酷的选项。
另见: https : //stackoverflow.com/questions/169511/how-do-i-iterate-over-a-range-of-numbers-defined-by-variables-in-bash
上面的@ eduardo-ivanec的run
函数的鱼壳实现
function run set number $argv[1] for i in (seq $number) eval $argv[2..-1] end end