/usr/bin/time을 호출하기 전에 별칭 확장

/usr/bin/time을 호출하기 전에 별칭 확장

쉘 내장 기능을 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"

관련 정보