쉘 내장 기능을 time
사용 하면 .time
/usr/bin/time
/usr/bin/time
$ /usr/bin/time ll
/usr/bin/time: cannot run ll: No such file or directory
ll
에 별칭을 전달하기 전에 별칭을 확장하도록 쉘을 어떻게 설득할 수 있습니까 /usr/bin/time
? 구문 분석 결과는 alias ll
특히 별칭 정의에 다른 별칭이 포함되어 있기 때문에 까다롭습니다.
제가 사용하는 이유는 /usr/bin/time
측정을 위해서입니다.최대 메모리 사용량.
답변1
별칭을 다음과 같이 정의할 수 있습니다 /usr/bin/time
.
alias 'ubtime=/usr/bin/time '
또는
alias 'ubtime=command time '
time
실행 파일의 경로를 하드코딩 하고 싶지 않은 경우 .
트릭은 별칭 정의의 후행 공백으로, 별칭이 그 뒤에 교체되어야 함을 쉘에 알려줍니다.
ubtime ll
실제로는 다음으로 확장됩니다.
/usr/bin/time ls -l
( ll
예라고 가정 ls -l
).
그럼에도 불구하고 /usr/bin/time
독립 실행형 실행 파일로서 파이프나 복합 명령, 함수 또는 셸 내장 시간을 측정할 수 없으므로 임의의 별칭 확장 시간을 측정할 수 없습니다.
/usr/bin/time
키 입력 출력 형식 보다 기본 출력 형식을 선호하기 때문에 사용하는 경우 time
많은 셸에서 이 형식을 수정할 수 있습니다. 예를 들면 다음과 같습니다 zsh
.
$ TIMEFMT=$'\e[31;1m%J\e[m: U:%U S:%S (%*E total) [avgtext:%X avgdata:%D maxmem:%M]'
$ time ls -l | head -n1
total 288072444
ls -l: U:0.00s S:0.01s (0.017 total) [avgtext:0 avgdata:0 maxmem:3]
head -n1: U:0.00s S:0.00s (0.015 total) [avgtext:0 avgdata:0 maxmem:3]
( \e[31;1m
컬러(굵은 빨간색) 출력의 경우).
답변2
이것은 bash에서 작동할 수 있습니다:
/usr/bin/time $(alias "ll" | sed "s/^alias [^=]*='\(.*\)'/\1/")
그러나 공백, 이스케이프 문자, 중첩된 별칭 및 함수 등과 같은 임의의 별칭에는 완전히 안전하지 않습니다.
추악하지 않은 해결책은 없을 것 같아요. 이것이 쉘에 내장된 time
. 별칭은 쉘 함수를 사용할 수도 있습니다.
별칭이 bash의 구성 파일에 정의되어 있고 시간 오버헤드에 신경 쓰지 않는다면 다음을 시도해 볼 수 있습니다.
/usr/bin/time bash -l -i -c "ll"