>  기사  >  백엔드 개발  >  쉘(bash)에서 "time" 명령의 출력에 대한 자세한 설명

쉘(bash)에서 "time" 명령의 출력에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-02-07 17:30:101680검색

머리말

time은 bash에서 매우 유용한 명령이라는 것을 누구나 알고 있을 것입니다. 이는 스크립트나 프로그램의 실행 시간을 측정할 수 있으며 일반적으로 프로그램 실행 효율성을 대략적으로 비교할 때 매우 편리합니다. 그러나 time 명령에 의해 출력된 시간 텍스트는 단순히 텍스트 파일 등으로 리디렉션될 수 없으며 화면에만 표시될 수 있으며 이는 비대화형 타이밍에 매우 불편하다는 것을 알게 될 것입니다.

예:

$ time find . -name "mysql.sh" >1.txt
 
real 0m0.081s
user 0m0.060s
sys  0m0.020s
 
$ time find . -name "mysql.sh" 2>2.txt
./work186/sms/bin/mysql.sh
./work186/sms/src/scripts/mysql.sh
./work186/sms/src/scripts1/mysql.sh
./work186/sms1/bin/mysql.sh
./work186/sms1/src/scripts/mysql.sh
./temp/sms/bin/mysql.sh
./temp/sms/src/scripts/mysql.sh
 
real 0m0.068s
user 0m0.040s
sys  0m0.030s

위의 시도를 통해 시간의 출력 정보를 파일로 리디렉션할 수 없는 것으로 나타났습니다. 이유는 무엇입니까? time은 쉘의 키워드이기 때문에 쉘은 전체적으로 time 명령 다음에 오는 명령줄을 처리합니다. 실제로는 다음 명령에 대한 출력입니다. 리디렉션되지 않습니다.

time 키워드는 표시를 설정합니다. command(find) 명령이 실행될 때까지 타이밍 정보가 stderr에 인쇄되지 않습니다. time 키워드를 사용하려면 전체 명령과 파이프라인은 물론 관련 리디렉션도 고급화되어야 합니다. 이것이 바로 간단한 리디렉션이 시간에 맞춰 작동하지 않는 이유입니다. 이는 Bash 구문으로 정의됩니다. 명령 후 리디렉션은 시간 명령의 일부입니다.

참고: time 명령의 출력은 표준 오류(stderr)로 전송됩니다.

time 명령이 실행되면 명령은 현재 셸의 다음 수준(즉, time 명령이 실행되는 쉘) 쉘이며, 시간 자체의 출력은 현재 쉘의 stderr에 있습니다. 위에 표시된 대로 리디렉션하면 명령의 stdout이 텍스트 파일로 리디렉션되지만 시간 자체의 출력 내용은 출력되지 않습니다.

첫 번째 해결 방법은 time 명령과 실행할 명령줄을 쉘 코드 블록, 즉 한 쌍의 중괄호 안에 넣는 것입니다. 공백과 세미콜론 사용에 주의하세요.

$ { time find . -name "mysql.sh"; } 2>2.txt
./work186/sms/bin/mysql.sh
./work186/sms/src/scripts/mysql.sh
./work186/sms/src/scripts1/mysql.sh
./work186/sms1/bin/mysql.sh
./work186/sms1/src/scripts/mysql.sh
./temp/sms/bin/mysql.sh
./temp/sms/src/scripts/mysql.sh
$ cat 2.txt
 
real 0m0.068s
user 0m0.030s
sys  0m0.040s

요약하자면, { time command-line } 2>file 구분 기호 사용에 주의하세요.

또 다른 방법은 아래와 같이 하위 쉘

을 사용하는 것입니다.

$ (time find . -name "mysql.sh") 2>2.txt
./work186/sms/bin/mysql.sh
./work186/sms/src/scripts/mysql.sh
./work186/sms/src/scripts1/mysql.sh
./work186/sms1/bin/mysql.sh
./work186/sms1/src/scripts/mysql.sh
./temp/sms/bin/mysql.sh
./temp/sms/src/scripts/mysql.sh
$ cat 2.txt
 
real 0m0.083s
user 0m0.040s
sys  0m0.020s
[root@web186 root]#

두 번째 방법도 성공했습니다. 요약하면 다음과 같습니다( time 명령줄) 2>file에서 시간 바로 뒤에 괄호가 옵니다(이것도 괜찮고 명령줄 끝에 세미콜론이 필요하지 않습니다. 물론 첫 번째 방법을 사용하는 것이 가장 좋습니다. 결국, 서브셸을 시작하는 데 시간이 많이 걸립니다.

요약

위 내용은 이 기사의 전체 내용입니다. 여러분의 공부나 업무에 궁금한 사항이 있으시면 메시지를 남겨주세요.

쉘(bash)의 "time" 명령어 출력에 대한 자세한 설명은 PHP 중국어 홈페이지를 참고해주세요.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.