如何调用带参数的时间命令以及与不带参数相同的行为?
How to invoke time command with parameter and same behavior as without parameter?
我想指定时间的格式,但表现不同:
$ time echo hehe | sleep 1
real 0m1.03s
user 0m0.00s
sys 0m0.00s
$ time -p echo hehe | sleep 1
real 0.00
user 0.00
sys 0.00
因此,如果我提供任何时间开关,它的行为会有所不同:
- 在第一种情况下,时间测量了整个 commnad 的时间(带管道)
- 在第二种情况下,它只测量了回声的时间
如何指定 -p 并从第一个 运行 获取结果?
你不能。在 ksh 中,time
可以为管道计时,而 time -p
只能为第一阶段计时。
管道上的 - POSIX
time
未定义。 ksh
的实现选择对整个管道计时。
- ksh
time
不支持 -p
或任何其他标志,如果使用任何标志调用它,将委托给外部 time
。
- 外部
time
(例如/usr/bin/time
)只能在管道的第一阶段运行(因为管道是shell构造并且需要shell合作)。
要么切换到允许这样做的 shell(如 bash),要么重写为外部 time
可以使用的东西,例如使用 sh -c
内部运行管道:
time -p sh -c 'echo hehe | sleep 1'
我想指定时间的格式,但表现不同:
$ time echo hehe | sleep 1
real 0m1.03s
user 0m0.00s
sys 0m0.00s
$ time -p echo hehe | sleep 1
real 0.00
user 0.00
sys 0.00
因此,如果我提供任何时间开关,它的行为会有所不同:
- 在第一种情况下,时间测量了整个 commnad 的时间(带管道)
- 在第二种情况下,它只测量了回声的时间
如何指定 -p 并从第一个 运行 获取结果?
你不能。在 ksh 中,time
可以为管道计时,而 time -p
只能为第一阶段计时。
-
管道上的
- POSIX
time
未定义。ksh
的实现选择对整个管道计时。 - ksh
time
不支持-p
或任何其他标志,如果使用任何标志调用它,将委托给外部time
。 - 外部
time
(例如/usr/bin/time
)只能在管道的第一阶段运行(因为管道是shell构造并且需要shell合作)。
要么切换到允许这样做的 shell(如 bash),要么重写为外部 time
可以使用的东西,例如使用 sh -c
内部运行管道:
time -p sh -c 'echo hehe | sleep 1'