Bash 시간이 이상하게 작동합니다.

Bash 시간이 이상하게 작동합니다.

왜 이것이 작동하지 않습니까?

$ time sleep 1 2>&1 | grep real

real    0m1.003s
user    0m0.007s
sys 0m0.001s

$ ofile=time.out
$ for x in {1..2}; do time sleep 1 ${x}> ${ofile} && test -s ${ofile} && echo '## OK' || echo '## NOK'; done

real    0m2.002s
user    0m0.002s
sys 0m0.000s
## NOK

real    0m3.002s
user    0m0.002s
sys 0m0.000s
## NOK

에 따르면 man time:

명령이 완료되면 time은 이 프로그램 실행에 대한 타이밍 통계를 제공하는 메시지를 표준 오류에 기록합니다.

내가 어디서 잘못됐나요? 각 반복 시간이 증가함에 따라 이것도 이상해 보입니까?

$ command -V time
time is a shell keyword

$ echo $SHELL
/bin/bash

$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-unknown-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

편집하다

댓글에서 제안을 시도했습니다.

$ command time sleep 1
bash: time: command not found

Debian9 시스템에서도 테스트되었습니다:

$ command -V time 
time is a shell keyword

$ command time sleep 1
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 1844maxresident)k
0inputs+0outputs (0major+76minor)pagefaults 0swaps

$ time sleep 1 |& grep real

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

$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

답변1

그러면 명령이 time sleep 1 ${x}효과적으로 실행됩니다 .time sleep 1 1time sleep 1 2

bash내장된 명령은 time이 두 값을 취하여 잠자기 상태로 유지합니다.

그래서 sleep 1 1와 같고 sleep 2sleep 1 2같습니다 sleep 3.

내장된 time명령을 사용하면 평소와는 조금 다르게 작동하므로 time sleep 2>...설명이 더 가깝습니다 time ( sleep 2>...).

그래서 대신

( time sleep 1 ) 2>&1 | grep real

관련 정보