시간을 어떻게 부르느냐에 따라 시간의 출력 형식이 달라지는 이유는 무엇입니까?

시간을 어떻게 부르느냐에 따라 시간의 출력 형식이 달라지는 이유는 무엇입니까?

초보자의 질문일 수도 있지만 이것이 어떻게 구성되어 있는지, time다음 두 가지 경우에 명령의 출력 형식이 왜 다른지 이해가 되지 않습니다.

via를 통해 사용하면 time출력은 기본 정보가 포함된 세 개의 행입니다.

$ time sleep 1

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

그런 다음 어떤 바이너리가 사용되는지 확인할 수 있습니다

$ which time
/usr/bin/time

훨씬 더 많은 정보와 함께 완전히 다른 형식으로 출력을 얻으려면 직접 호출하십시오.

$ /usr/bin/time sleep 1
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 2000maxresident)k
0inputs+0outputs (0major+77minor)pagefaults 0swaps

관련된 별칭이 없습니다.time

$ alias | grep time
$ 

나는 뛰고있어 Ubuntu 16.04.

답변1

첫 번째는 bash자신의 내장 키워드 time( 로 컴파일됨 bash)이고 두 번째는 외부 실행 파일 time( /usr/bin/time, time패키지와 함께 제공됨)입니다.

또한 which단지 검색만 하기 때문에 쉘의 내장 명령이나 키워드를 표시할 수 없으므로 이를 PATH사용해야 합니다 . type쉘 자체가 내장되어 type쉘의 내부 엔터티(및 PATH)를 추가로 확인할 수 있으므로 다음을 통해 차이점을 확인할 수 있습니다.

type -a time

여기:

$ type -a time
time is a shell keyword
time is /usr/bin/time

을 사용하면 첫 번째 것이 실행됩니다 time. type(없이 -a) 를 사용하여 실행 중인 항목을 확인할 수도 있습니다 .

type time

이는 쉘의 내부 엔터티를 검색하고 가능한 모든 소스를 검색하도록 -a지시합니다 .typePATH

어떤 이유로 외부 버전이 필요한 경우 다음 중 하나를 사용하세요.

\time
"time"
'time'
command time

답변2

내장 유틸리티와 외부 유틸리티의 또 다른 차이점은 Bash의 내장 유틸리티입니다.time 시간이 지나면 파이프라인이 완성될 것입니다또는 쉘 함수 호출(분명히 루프이지만 매뉴얼에서는 이를 약속하지 않는 것 같습니다). 외부는 time쉘 외부에 있기 때문에 주변 코드에 대해 알 수 없습니다.

bash$ time echo blah | sleep 3
real    0m3.002s
...
bash$ /usr/bin/time echo blah | sleep 3
0.00user 0.00system 0:00.00elapsed ?%CPU 
...
bash$ time for x in 1 2 3 ; do sleep 1 ; done
real    0m3.006s
...

시간이 있는 동안지정된표준에서는 파이프라인에서 어떻게 작동해야 하는지 지정되지 않은 채로 남아 있으므로 이와 같은 보다 강력한 내부 구현이 가능합니다.

관련 정보