Shell 如何使用参数调用time命令,以及使用与不使用参数时相同的行为?

Shell 如何使用参数调用time命令,以及使用与不使用参数时相同的行为?,shell,time,ksh,Shell,Time,Ksh,我想指定时间的格式,但其行为不同: $ 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 因此,如果我提供任何时间开关,它的行为将不同: 在第一种情况下,时间测量了整个通信时间(使用管道) 在第二种情况下,它只测量回声的时间 如何指定-p并从第一次

我想指定时间的格式,但其行为不同:

$ 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
因此,如果我提供任何时间开关,它的行为将不同:

  • 在第一种情况下,时间测量了整个通信时间(使用管道)
  • 在第二种情况下,它只测量回声的时间

如何指定-p并从第一次运行中获得结果?

您不能。在ksh中,
time
可以为管道计时,而
time-p
只能为第一阶段计时

  • 管道上的POSIX
    time
    未定义
    ksh的实现选择对整个管道计时
    
  • ksh
    time
    不支持
    -p
    或任何其他标志,如果使用任何标志调用它,它将委托给外部
    time
  • 外部
    time
    (例如
    /usr/bin/time
    )只能在管道的第一阶段运行(因为管道是外壳结构,需要外壳的配合)
要么切换到允许这样做的shell(如bash),要么重写到外部
time
可以使用的东西,例如内部运行管道的带有
sh-c
的单阶段:

time -p sh -c 'echo hehe | sleep 1'

为什么必须将线路
的输出回送到时间?你的意思是一个接一个地运行吗?我有一个更有意义的任务要做,但是这个例子显示了我在time命令方面的问题。