如果我在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中使用它时相同的输出。
答案 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
生成的默认输出。此内置版本的time
是bash
扩展名: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
。
最可能的原因是:
#!/bin/sh
而不是#!/bin/bash
;和/bin/sh
实际上不是bash
,而是一个更轻量级的POSIX兼容shell,没有bash
扩展名(如某些Linux发行版目前所见)。解决方案是确保脚本使用bash
专门调用#!/bin/bash
,如果它依赖于bash
扩展名。
答案 2 :(得分:1)
不同之处在于输出时输出不会传到终端。
执行漂亮布局所需的终端代码不适用于文件流。
你想要达到什么目的?如果您打算让“屏幕截图”查看script