zsh의 함수에서 “시간”을 실행하는 방법 -l } time f 두 번째 경우에는

이것은 작동합니다 :

time ls -l

이 작동하지 않습니다

f() { ls -l }
time f

두 번째 경우에는 시간 출력이 인쇄되지 않습니다. 왜?



답변

@ John1024가에 대한 답변을 제공했습니다 bash. zsh태그 에 답하려고합니다 …

함수에 대한 서브 쉘을 생성하면 타이밍 통계를 얻습니다.

% zsh
% f() { sleep 1 }
% time f
% time (f)
( f; )  0.00s user 0.05s system 4% cpu 1.061 total
% time sleep 1
sleep 1  0.00s user 0.03s system 2% cpu 1.045 total

이것은 약간의 오버 헤드를 추가하지만이 (가짜가 아닌 ;)) 예제 에서 볼 수 있듯이 아마도 중요하지 않을 것입니다.


답변

당신은 모두이 태그 추가 bash하고 zsh. 이 답변은에 적용됩니다 bash.

이 오류는 bash다음 과 같습니다.

f() { ls -l }

대신 작동하는 것은 다음과 같습니다.

f() { ls -l ; }

의 새로운 정의로 ftime명령이 작동합니다.

아래 bash에서 중괄호로 명령을 그룹화 할 때 마지막 명령 뒤에 세미콜론 또는 개행 문자가 와야합니다. 이 내용은의 “복합 명령”에 설명되어 man bash있습니다.

(나는 아래이 솔루션을 테스트 할 zsh따라,하지만 난 현재는 설치하지 않은하지만. 이 SO 게시, 아래의 솔루션을 zsh실행할 수 있습니다 f서브 쉘에서. 업데이트 : 대한 MPY의 답변을 @ 참조하십시오 zsh. )