time command1 | command2
또는 time
에 적용됩니까 ? 귀하의 대답이 둘 중 하나라면 다른 하나는 어떻게 지정하시겠습니까?command1
command1 | command2
bash 구문이나 쉘이 명령을 해석하는 방식으로 답변을 설명할 수 있습니까?
쉘이 명령을 구문 분석할 때 time
이를 제어 연산자로 인식하기 전에 예약어로 인식합니까? 예약어로 인식되는 것과 제어 연산자로 인식되는 |
순서에 따라 또는 에 적용되는지가 결정됩니까 ?time
|
time
command1
command1 | command2
감사해요.
답변1
time command1 | command2
또는
time
에 적용 됩니까 ?command1
command1 | command2
time
일반적으로 두 가지 방법으로 구현됩니다. 외부 명령과 주어진 셸의 내부 기능입니다. (저는 "함수"라고 부릅니다. "함수"라고 하는 이유는 셸이 구현하는 방식에 따라 다르지만 예약어라고 생각하기 때문입니다. 따라서 time
시스템에 외부 장치가 하나 이상 있다고 가정하면,실제 대답은 사용자가 실행 중인 셸과 (해당되는 경우) time
해당 셸에서 구현되는 방법에 따라 다릅니다..
태그에 따르면 Bash를 내부 쉘로 사용하고 있으며 단순화를 위해 time
GNU를 외부 쉘로 가정합니다.time
큰 타격 time
:
- 예약어입니다.
- 전체 파이프라인에 적용됩니다.
- 내부 명령어/함수/예약어와 함께 사용할 수 있습니다.
그누 time
:
- 외부 명령입니다.
- 간단한 명령에 작동합니다.
- 쉘 내에서 호출되지 않는 한 내부 명령/함수/예약어와 함께 사용할 수 없습니다.
특정 시나리오에서 Bash를 실행할 때 time
적용하십시오 .command1 | command2
. 사용 중인 셸에 내부가 없지만 time
시스템에 외부가 있는 경우 .time
command1
묻다:당신의 대답이 둘 중 하나라면, 다른 하나는 어떻게 지정하시겠습니까?
Bash time
내부에서 작동 :command1
{ … }
제한 에 사용되는 범위time
:{ time command1; } | command2
외부
time
명령을 실행합니다.# Using the `command` builtin command time command1 | command2 # Using `env` env time command1 | command2 # Escaping/quoting the `time` word \time command1 | command2 'time' command1 | command2 # Explicitly running the external `time` command /usr/bin/time command1 | command2
GNU 의 경우 :time
command1 | command2
time
파이프를 외부 파일에 배치하고 실행합니다.
time ./script.sh
셸을 호출하고 그 안에서 파이프라인을 실행합니다.
time sh -c 'command1 | command2'
묻다:bash 구문이나 쉘이 명령을 해석하는 방식으로 답변을 설명할 수 있습니까?
Bash는 그것을 기록합니다 time
.3.2.2 파이프라인매뉴얼 장:
파이프의 형식은 다음과 같습니다.
[time [-p]] [!] command1 [ | or |& command2 ] …
예약어는
time
파이프라인이 완료된 후 타이밍 통계를 인쇄합니다.
GNU 문서는 다음을 time
통해 제공됩니다 .info time
man time
명령의 형식은 다음
time
과 같습니다.time [option...] COMMAND [ARG...]
time
COMMAND
주어진 인수를 사용하여 프로그램을 실행합니다ARG...
.COMMAND
완료 되면time
사용된 리소스에 대한 정보가 표시됩니다COMMAND
.
POSIX 문서기준time
, 이는 많은 구현의 기초가 됩니다 time
.
요약
time [-p] utility [argument...]
설명하다
유틸리티는 피연산자로 제공된 인수를 사용하여 피연산자
time
로 명명된 유틸리티를 호출 하고 유틸리티의 타이밍 통계를 나열하는 표준 오류에 메시지를 써야 합니다.utility
argument
time
파이프라인의 일부로 사용되는 경우 보고된 시간은 그룹화된 명령의 유일한 명령이 아닌 한 지정되지 않습니다(참조:그룹화 명령) 이 파이프라인에서.근본적인
KornShell에서는
time
단순한 명령이 아닌 전체 파이프라인의 시간을 측정하는 데 사용할 수 있는 셸 예약어입니다. POSIX 정의의 표현은 이러한 구현을 허용합니다.
utility
대신 이 용어는command
쉘 복합 명령, 파이프, 특수 내장 명령 등을 직접 사용할 수 없다는 사실을 강조하기 위해 사용됩니다. 그러나utility
여기에는 표준 유틸리티뿐만 아니라 사용자 응용 프로그램과 셸 스크립트도 포함됩니다.
묻다:쉘이 명령을 구문 분석할 때
time
이를 제어 연산자로 인식하기 전에 예약어로 인식합니까?|
Bash 매뉴얼에서는 이 정보를 명시적으로 언급하지 않지만,POSIX는 명확하게 다음과 같이 말합니다.인식 순서:
2.10.1 쉘 구문 및 어휘 규칙
쉘의 입력 언어는 먼저 문자 수준에서 인식되어야 합니다. 생성된 태그는 다음 규칙(순서대로 적용)에 따라 즉각적인 컨텍스트별로 분류되어야 합니다. 이러한 규칙은 토큰 수준에서 구문 분석할 "토큰"을 결정하는 데 사용해야 합니다. 토큰 인식 규칙토큰 인식적용 가능합니다.
- 토큰이 운영자인 경우 해당 운영자의 토큰 식별자가 생성되어야 합니다.
- 문자열이 숫자로만 구성되고 구분 기호가
<
또는 중 하나 인 경우>
토큰 식별자입니다 .IO_NUMBER반환되어야 합니다.- 그렇지 않으면 토큰 식별자토큰결과.
더 구별하다토큰상황에 따라 다릅니다. 같을 수도 있다토큰생산하다단어,ㅏ이름, 하나ASSIGNMENT_WORD, 또는 상황에 따라 다음 예약어 중 하나를 사용합니다.
간단히 말해서:연산자는 예약어보다 먼저 인식됩니다..
묻다:
time
예약어로 인식되는 것과 제어 연산자로 인식되는|
순서에 따라 또는time
에 적용되는지 가 결정됩니까 ?command1
command1 | command2
예약어로 예약되어 있더라도 time
전체 파이프라인이 아닌 간단한 명령에 적용하도록 프로그래밍할 수 있습니다(비록 이 작업을 수행하는 쉘은 모르지만).중요한 것은 time
인식되는 순서가 아니라 어떻게 구현되느냐이다..