모든 bash 명령에 대한 시간 및 기타 정보를 보고하는 방법은 무엇입니까? [복사]

모든 bash 명령에 대한 시간 및 기타 정보를 보고하는 방법은 무엇입니까? [복사]

터미널에서 실행하는 대부분의 작업은 계산하는 데 오랜 시간이 걸리며 bash가 마지막에 시간 보고서를 출력하도록 하고 싶습니다.모든명령이 터미널에 입력됩니다. 이를 위해 bashrc에 추가할 수 있는 것이 있나요?

예:

$ find / -ls
<find / -ls return info>
start time = 10:21:54 | end time = 10:31:34 | time lapsed = 00:10:20
$

또는

$ make all
<make all return info>
start time = 10:21:54 | end time = 10:31:34 | time lapsed = 00:10:20

cd와 같은 명령에 대한 예외 목록을 추가할 수 있으면 좋겠지만 별로 신경쓰이지는 않습니다.

답변1

나는 다음을 시도했습니다 .bashrc.

echo -ne "$PS1"
while IFS= read -er line;do
    eval "time $line"
    echo -ne "$PS1"
done

이는 대략적으로 원하는 작업을 수행하지만 몇 가지 주의 사항이 있습니다.

  • 프롬프트가 실제로 손상되었습니다(쉘은 일반적으로 \W프롬프트를 에코하기 전에 프롬프트의 유사한 시퀀스를 해석합니다).
  • 명령줄 편집 기능이 손실됩니다(예: CTRL+ 를 사용할 수 없음).Lclear
  • 다른 여러 가지가 있을 수 있습니다.

나는 쉘 기능을 통해 이것을 선택적으로 활성화하는 것이 좋은 타협이라고 생각합니다.

timed_commands() {
    [ "$1" = off ] && exec bash
    PS1='$ '  # Put something simple here
    while IFS= read -erp "$PS1" line;do
        eval "time $line"
    done
}

다음을 사용하여 열고 timed_commands닫으십시오.timed_commands off

의견을 주신 @jthill에게 감사 -e드립니다 read.

답변2

이제 이것은 너무 나쁘지만 효과가 있을 수도 있습니다...

터미널 ID 문자열(쿼리에서 반환된 문자열)을 "time"으로 설정합니다. 후행 공백에 유의하세요. 다음으로 쿼리로 끝나도록 프롬프트를 설정하세요. 이제 프롬프트가 표시될 때마다 터미널이 자동으로 시간과 공간을 입력한 다음 사용자가 명령을 입력합니다. 많은 터미널에서 이러한 일이 발생하는 것을 방지하기 위해 이 기능이 비활성화되어 있으므로 이 기능이 모든 터미널에서 작동하는 것은 아닙니다.

xterm과 함께 작동하게 하려면 .Xresources에 다음 줄을 추가하고 xrdb를 사용하여 다시 로드하세요.

xterm*answerbackString: time ^[0D^[0A
URxvt*answerbackString: time ^[0D^[0A
xterm_color*answerbackString: time ^[0D^[0A

여기서 ^[는 이스케이프 문자입니다(xterm은 AnswerbackString 끝에 있는 공백을 좋아하지 않기 때문에 커서를 흔들었습니다.

다음으로 프롬프트 문자열 끝에 ENQ를 추가합니다(bash 특정 예).

PS1="${PS1}\[\005\]"

새 xterm에서 새 쉘을 시작하고 제대로 작동하도록 기도하세요. \005는 ENQ이고, [ 및 ]는 \005가 커서를 이동하지 않을 것임을 bash에 알립니다.

관련 정보