/ usr / bin / time을 실행할 때 그러한 파일이나 디렉토리가 없습니다


11

나는 내 자신의 안드로이드 롬을 구축하고 있습니다. 그것을 구축하기 위해 나는 실행해야합니다

mka -j8 bacon

그러나 빌드하는 데 걸리는 시간을 측정하고 싶었습니다.

/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" mka -j8 bacon

그것은 말하고 있기 때문에 실행되지 않습니다

/usr/bin/time: cannot run mka: No such file or directory

이 문제를 해결하는 방법에 대한 도움을 주시면 감사하겠습니다! 나는 xubuntu를 실행 중입니다.

편집하다:

어떤 이유로 mka 대신 make를 사용하면 효과가 있지만 mka를 사용 하는 것이 좋습니다.

/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" make -j8 bacon

편집 2 : 로부터 사이 애 노젠 모드 웹 사이트

쉘을 호출 $ source build/envsetup.sh하거나 $ . build/envsetup.sh쉘에서 빌드 디렉토리에서 envsetup.sh 스크립트를 실행합니다. envsetup.sh는 빌드 환경에 많은 기능을 추가하며 그 중 가장 중요한 기능은 다음과 같습니다.

source build/evnsetup.sh시간을 실행하기 전에 내가 실행하는 명령입니다. evnsetup.sh에 의해 추가 된 기능 중 하나는입니다 mka. time명령 내에서 이것을 호출 할 수 있습니까?

편집 3 : mka 유형의 출력

$ type mka
mka is a function
mka () 
{ 
    case `uname -s` in 
        Darwin)
            make -j `sysctl hw.ncpu|cut -d" " -f2` "$@"
        ;;
        *)
            schedtool -B -n 1 -e ionice -n 1 make -j$(cat /proc/cpuinfo | grep "^processor" | wc -l) "$@"
        ;;
    esac
}

/ usr / bin / mka와 같은 mka의 전체 경로를 넣으려고 했습니까?
desgua

문제는 evnsetup.sh가 일부 내용을 초기화한다는 것입니다. 터미널에서 mka를 호출하기 전에 해당 파일을 실행해야합니다. 분명히 시간 명령에서 매개 변수로 호출 할 때 인식되지 않습니다.
P1nGu1n

이것을 어떻게 재현 할 수 있습니까?
Braiam

source build/evnsetup.sh호출 한 지점 에서을 실행 한 후 time mka -j8 bacon명령의 출력을 게시 할 수 type mka있습니까?
Malte Skoruppa

@ MalteSkoruppa 출력 추가, mka는 bash 함수 인 것 같습니다.
P1nGu1n

답변:


11

문제는 즉 mkabash는 스크립트에 의해 내 보낸 된 함수가 아닌 실행 (반대입니다 make그래서) /usr/bin/time가 실행을 위해 보이는대로, 그것을 발견하지 않습니다.

두 가지 가능한 솔루션이 있습니다.

먼저 bash 내장 함수 time와 실행 파일 사이에는 차이가 /usr/bin/time있습니다. 이들은 서로 다른 매개 변수를 사용하고 다른 출력을 생성하는 다른 명령입니다.

$ time sleep 1

real    0m1.001s
user    0m0.000s
sys     0m0.001s

$ /usr/bin/time sleep 1
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 664maxresident)k
0inputs+0outputs (0major+215minor)pagefaults 0swaps

help timebash built-in에 대한 도움말을 보려면 입력하십시오 time. man time실행 파일에 대한 도움말을 보려면 입력 하십시오 /usr/bin/time.

첫 번째 솔루션은을 사용 time하고 두 번째 솔루션은을 사용합니다 /usr/bin/time.

첫 번째 해결책 : bash 내장 함수 사용 time

bash 내장 함수 time는 선언 된 bash 함수를 인식하고 즉시이를 사용하여 그러한 함수의 시간을 측정 할 수 있습니다.

$ foo() {
    sleep 1;
    echo "Hello World"
  }
$ time foo
Hello World

real    0m1.002s
user    0m0.000s
sys     0m0.001s

귀하의 경우 다음 명령이 작동해야합니다.

$ time mka -j8 bacon

이것이 내가 선호하는 방법입니다. 그러나 원하는 출력을 정확하게 생성하지 못할 수 있습니다. 특히 CPU 사용량을 측정하거나 인쇄하지 않습니다.

두 번째 해결책 : 실행 파일 사용 /usr/bin/time

/usr/bin/time(내가 아는 한) 사용하여 내장 bash 함수의 시간을 직접 측정 할 수는 없지만 bash 함수를 /bin/bash실행하는 실행 파일 의 시간을 측정 할 수 있습니다 . 이것은 약간 해키이며 추가 인스턴스를 시작할 때 약간의 오버 헤드를 생성합니다 bash. 그러나 계산하는 데 몇 분이 걸리는 함수에 직면 할 때이 오버 헤드는 무시할 수 있으므로 여전히 귀하의 요구에 더 잘 맞을 수 있습니다.

/bin/bashbash 함수 에서 실행 파일 을 시작하려면 먼저 함수를 내 보내야합니다.

$ foo() {
    sleep 1;
    echo "Hello World"
  }
$ export -f foo
$ echo foo | /usr/bin/time /bin/bash
Hello World
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 1476maxresident)k
0inputs+0outputs (0major+707minor)pagefaults 0swaps

따라서 원하는 경우 /usr/bin/time원하는 출력 형식 을 사용 하고 생성하려면 다음과 같이 진행하십시오.

$ export -f mka
$ echo 'mka -j8 bacon' | /usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" /bin/bash

감사합니다. 왜 작동하지 않는지 이해합니다! 두 가지 짧은 질문, -f매개 변수 는 무엇입니까 , 나는 이것을 찾을 수 없었습니다. 둘째, / bin / bash는 무엇입니까? 정말 감사합니다!
P1nGu1n

1
-f에 매개 변수는 export말한다 export쉘 함수를 export 할 수 있습니다. 참조하십시오 help export. -f에 매개 변수는 /usr/bin/time이야기 /usr/bin/time형식 문자열을 기대하는,하지만 난 당신이 알고있는이 가정합니다. /bin/bash마지막 명령 의 일부는 내 보낸 mka함수를 실행할 때 실행 시간이 실제로 측정되는 bash 실행 파일입니다 . 표준 입력 mka에서 mka -j8 bacon명령을 읽고 실행하기 때문에 함수를 실행 하므로 echo파이프와 파이프를 사용합니다. 답변이 늦어서 죄송합니다. :)
Malte Skoruppa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.