`time` 명령이 어떤 옵션에서도 작동하지 않는 이유는 무엇입니까?


61

시간 출력을 형식화 하기 위해 옵션 time과 함께 command 를 사용하려고 시도했지만 -f다음 오류가 발생합니다.

-f: command not found

그럼 난 다른 옵션을 사용하려고 -a, -o등 내가 같은 오류가 발생합니다. 심지어 time --version작동하지 않습니다 ( --version: command not found).

내가 이미 여러 번 읽었 기 때문에 그 남자를 읽도록 말하지 마라 ...이 모든 옵션들이 여기에 명시되어있다. 그렇다면 어디에서 문제가 될 수 있습니까?


않습니다 sudo apt-get install --reinstall time도와 드릴까요?
jobin

9
아니면 내부 쉘 time/usr/bin/time
Rmano

답변:


91

글쎄, 당신이 그것을 좋아하지 않더라도, 나는 당신이 더 많은주의를 기울여 다시 읽게 할 것 man time입니다. EXAMPLES섹션 의 끝에는 다음이 있습니다.

  Users of the bash shell need to use an explicit path in order to run
  the external time command and not the shell builtin variant.  On system
  where time is installed in /usr/bin, the first example would become
       /usr/bin/time wc /etc/hosts

따라서 time쉘 키워드로 제공된 내부 버전을 사용하는 bash 쉘을 사용한다고 가정합니다 . 다음 명령을 사용하여이를 확인할 수 있습니다.

type time

출력은 아마도 다음과 같습니다.

time is a shell keyword

이 경우 real time 명령을 사용하려면 분명한 경로를 사용해야합니다 /usr/bin/time.

또한 더 이상 shell keyword를 사용하지 않으려면 다음과 같이 영구 별칭만들time있습니다 .

alias time='/usr/bin/time'

다음 time명령 때문에 쉘 키워드를 덮어 씁니다 .

type time

이제 다음과 같은 결과가 나타납니다.

time is aliased to `/usr/bin/time'

5
쉘 빌드 명령의 경우 : {info time} 및 {type time}. 이진 명령 : {which time} 및 {man time}
Michael Martinez

@Michael info time은 바이너리에 관한 것입니다. help time내장에 관한 것입니다.
wjandrea

네, 죄송합니다. "도움말"을 생각하고 있었지만 "정보"가 나왔습니다
Michael Martinez

21

다른 답변에서 설명 하듯이 time쉘 키워드이므로 사용 가능한 유일한 옵션은 -p다음과 같습니다.

terdon@oregano ~ $ help time
time: time [-p] pipeline
    Report time consumed by pipeline's execution.

Execute PIPELINE and print a summary of the real time, user CPU time,
and system CPU time spent executing PIPELINE when it terminates.

Options:
  -p    print the timing summary in the portable Posix format

그래서, 당신은 실행해야 time그에서입니다 /usr/bin. 몇 가지 방법이 있습니다.

  • time대신 실행 파일을 사용하십시오 .

    /usr/bin/time -f %Uuser ls >/dev/null
  • 사용 \쉘이 별칭과 키워드를 무시하고 대신 검색됩니다 $PATH일치하는 실행 파일 :

    \time -f %Uuser ls >/dev/null 
  • command비슷한 효과를 가진 내장을 사용하십시오 .

    command time -f %Uuser ls >/dev/null
  • 해당 키워드가없는 다른 쉘을 사용하십시오. 예를 들어 sh(실제로 dash우분투에 있음) :

    sh -c "time -f %Uuser ls >/dev/null"
  • 를 사용 which하여 검색하십시오 $PATH(OK, 이것은 바보입니다).

    $(which time) -f %Uuser ls >/dev/null

time정기적으로 반대 복제 내장 기능을 수행하는 방법이 /usr/bin/time있습니까? 즉 bash 스크립트를 대시로 변환합니다.
Dan M.

@DanM. 이해가 안 돼요 내장을 원하면을 time실행하십시오 time. 독립 실행 형 실행 파일을 원하면을 실행하십시오 /usr/bin/time.
terdon

time내가 아는 한 우분투의 기본 쉘 에는 내장 기능이 없습니다 . 내장 된 스크립트를 동일한 동작으로 독립형으로 변환하고 싶습니다.
Dan M.

@DanM. 그런 다음을 사용하십시오 time. 사용 가능한 것을 호출합니다. 그것은 bash에 내장되어 있고 대시에는 독립형입니다. 을 사용 /usr/bin/time하면 항상 bash와 dash로 독립형을 호출합니다. 그러나 필요한 행동을 설명하면서 새로운 질문을해야 할 것 같습니다. 당신이 할 경우 알려 주시면 도와 드리겠습니다.
terdon

예, 그러나 내장 및 독립형은 구문 / 의미가 크게 다릅니다. 어쨌든 고마워. 직접 처리하는 방법을 찾지 못하면 새로운 질문을 할 것입니다.
Dan M.

17

bashzsh쉘 내부가 time명령을. 당신은 사용해야합니다

/usr/bin/time -f ...

BTW, (from zsh) 을 사용하여 다음을 발견했습니다 .

~% which  time
time: shell reserved word
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.