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

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

쉘 내장을 사용할 때 time. 없이 쉘에 전달할 모든 명령을 전달할 수 있습니다 time. 그러나 external 을 사용할 때 /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"

관련 정보