在bash脚本中使用时间:如何获得“正常”输出?

时间:2011-09-28 19:57:06

标签: bash shell time

如果我在shell中使用time,我会得到类似

的输出
$ time sleep 1

real    0m1.003s
user    0m0.000s
sys     0m0.000s

但是,如果我在bash脚本中使用相同的命令,则输出为

0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 2176maxresident)k
0inputs+0outputs (0major+179minor)pagefaults 0swaps

我已经找到了this post,但我想要的是在脚本中使用time,同时仍然获得与在shell中使用它时相同的输出。

3 个答案:

答案 0 :(得分:2)

您是否尝试过-p旗帜?

$ echo "time -p sleep 1" > x1

$ bash x1
real 1.01
user 0.00
sys 0.00

答案 1 :(得分:2)

0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 2176maxresident)k
0inputs+0outputs (0major+179minor)pagefaults 0swaps

...是外部time command的GNU版本生成的默认输出。

real    0m1.003s
user    0m0.000s
sys     0m0.000s

...是bash builtin time生成的默认输出。此内置版本的timebash扩展名:POSIX-compliant shell不需要提供time的内置版本。

但是,POSIX does specify an external time utility可以使用-p选项生成另一种输出格式:

real 1.01
user 0.00
sys 0.00

... bash内置也接受-p选项以生成相同的输出格式。


如果脚本实际上由bash 运行,那么bash内置版应该可以在shell脚本中完美运行:

$ cat time.sh
#!/bin/bash
time sleep 1
$ ./time.sh

real    0m1.001s
user    0m0.000s
sys     0m0.000s
$

因此,您的脚本似乎正在调用外部实用程序而不是内置bash

最可能的原因是:

  1. 您的脚本代表#!/bin/sh而不是#!/bin/bash;和
  2. 您计算机上的/bin/sh实际上不是bash,而是一个更轻量级的POSIX兼容shell,没有bash扩展名(如某些Linux发行版目前所见)。
  3. 解决方案是确保脚本使用bash专门调用#!/bin/bash,如果它依赖于bash扩展名。

答案 2 :(得分:1)

不同之处在于输出时输出不会传到终端。

执行漂亮布局所需的终端代码不适用于文件流。

你想要达到什么目的?如果您打算让“屏幕截图”查看script