시간의 출력 형식이 호출 방식에 따라 다른 이유


14

초보자의 질문 일지 모르지만 이것이 어떻게 구성되어 있고이 time두 가지 경우 에 명령 의 출력 형식 이 다른 이유를 이해하지 못합니다 .

via를 사용하는 경우 time출력은 기본 정보가있는 3 개의 행입니다.

$ 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.


이것이 which기본적으로 쓸모없는 이유 입니다.
Bakuriu

답변:


23

첫 번째 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

이 명령 -atype쉘의 내부 엔티티와 PATH검색 가능한 모든 소스에서 검색하도록 지시 합니다.

어떤 이유로 외부 장치가 필요한 경우 다음 중 하나를 사용하십시오.

\time
"time"
'time'
command time

아, 알 which다시피 내장을 고려하지 않습니까? 그리고 항상 type -a먼저 확인해야합니다 . 실제로, 그것은 위치 를 출력 type하기 which때문에 우월 해 보인다/usr/bin/time
xaxa

@xaxa 예, 편집 내용을 확인하십시오.
heemayl

자세한 답변을 주셔서 감사합니다! which그때 유용한 것은 무엇입니까 ?
xaxa

1
typebash를 사용하는 경우 @xaxa 가 실제로 우수합니다. 다른 쉘에는 typebulitin 또는 time내장 기능 이 없을 수 있습니다 .
jpaugh

2
@jpaugh별로 요. POSIX는 있습니다 time만 아니라 외부로 type, type모든 POSIX 호환 쉘에서 사용할 수 있습니다.
heemayl

4

내장 유틸리티와 외부 유틸리티의 또 다른 차이점은 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
...

표준에 시간이 지정 되어 있지만 파이프 라인에서 작동해야하는 방식 은 지정 되어 있지 않으므로보다 강력한 내부 구현이 가능합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.