计时运行命令
见过好几个人问怎样可以计时运行某一个命令?比如我可能想运行某个交互式的命令(像fdisk),但我又不想让它一直永远等待输入,我就得给它指定一个时间,若没有输入则自动退出。
我之前也遇到过这个问题,当时找到的是timed-run。而最近我发现coreutils里面已经默默包含了一个等价的命令——timeout。
timed-run来自expect包,很明显是用expect脚本写的:
% cat /usr/bin/timed-run #!/bin/sh # exec expect -f "$0" ${1+"$@"} # run a program for a given amount of time # i.e. time 20 long_running_program set timeout [lindex $argv 0] eval spawn [lrange $argv 1 end] expect
而timeout则来自coreutils,应该是用C写的。它们的用法都一样,后面第一个参数是指定的时间,在后面就是要运行的命令,比如:timeout 1 sleep 10。timeout还能接受一些选项,更强大一些。