【问题标题】:How to use time command but only to time part of the script如何使用时间命令,但仅对脚本的一部分进行计时
【发布时间】:2016-08-15 15:13:12
【问题描述】:

仅作记录,我在 Unix Solaris 系统中的 ksh 上运行。 我有一个看起来像这样的脚本:

awk '{ do stuff here }'

for n in x {
    echo $something | awk '{ do more stuff here }'
}

我知道当我运行脚本时我可以在控制台中使用time,例如,如果文件名是file_name,我会这样运行它:time ksh file_name,但是像这样我返回整个脚本的运行时间,我只需要for 的运行时间,以便与另一个脚本进行一些计算。我是否有可能在脚本中调用time,所以可以说我会在for 之前添加它,以便它只计算那部分?另外我想知道一个脚本是否可以有两个time,这样你就可以得到脚本两个不同部分的运行时间。

【问题讨论】:

    标签: shell unix time solaris ksh


    【解决方案1】:

    由于 Bash 脚本中的所有变量都是全局变量,因此您可以将 for 存储在一个函数中并在 time 之前调用它:

    my_for_function () {
        for n in x {
            echo $something | awk '{ do more stuff here }'
        }
    }
    
    awk '{ do stuff here }'
    
    time my_for_function   # here you call `time`
    

    然后你就可以正常运行脚本了。

    小例子

    $ cat silly_script.sh
    
    myfunc() {
        for x in "${a[@]}"
            do
                 echo "$x --"
                 sleep 1
            done
    
    }
    
    awk 'BEGIN {print "i am here"}'
    a=(1 2 3 4)
    
    time myfunc
    
    echo "i am done"
    

    让我们运行它:

    $ bash silly_script.sh
    i am here
    1 --
    2 --
    3 --
    4 --
    
    real    0m4.008s
    user    0m0.004s
    sys 0m0.000s
    i am done
    

    【讨论】:

    • 你在开始时提到了 bash 脚本,但我在 ksh 上运行,这在 ksh 中可以工作吗?
    • @hedgehog 哦,真的。我这里没有安装ksh。介意在您的安装中测试此脚本吗?
    • 刚刚做了,它没有给出错误,它打印回声“我在这里”,但随后没有任何反应,也没有退出脚本。 Yes,Master? ksh te_script i am here 我想它被困在循环中了..
    • @hedgehog 我刚刚安装了ksh93 并运行了脚本。它运行良好。由于其中有一个sleep 1,因此循环中的每个项目都需要一秒钟才能显示出来。
    • 我等了 20 秒,但什么也没发生,无论如何我将您的解决方案集成到我的脚本中,是的!它的工作:)你一如既往地漂亮,尽管还有一个更快的问题,如果我使用你所说的时间来打印这个real 0m0.03s user 0m0.00s sys 0m0.00s,如果我为整个脚本运行时间它会显示这个real 0m0.171s user 0m0.019s sys 0m0.018s ,我怎样才能让我用于函数的时间以毫秒为单位显示所有数字?和其他人一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2020-11-28
    • 2017-12-07
    • 2015-09-28
    • 2012-02-20
    相关资源
    最近更新 更多