time 명령의 출력은 bash 스크립트의 변수로 전송됩니다.

time 명령의 출력은 bash 스크립트의 변수로 전송됩니다.

비슷한 질문이 있다는 것을 알고 있지만 내 상황에 충분히 가까운 질문을 찾지 못했습니다...

다음과 같이 bash 스크립트에서 명령 시간을 측정해야 합니다.

mytime="$(time ( ls ) 2>&1 1>null)"
rm null

이것은 훌륭하게 작동합니다. 하지만 ls이를 더 복잡한 것으로 바꾸려고 하면 문제가 발생합니다.

command="$reg 1d_euler_2nd.rg -nc $nc -ll:cpu $np -ns $nstop"
mytime="$(time ( $command ) 2>&1 1>null)"
rm null

reg환경 변수, nc, np및 는 nstop모두 내 스크립트에 정의되어 있습니다 . 이 코드를 사용하려고 하면 다음 오류가 발생합니다.

(standard_in) 1: syntax error
(standard_in) 1: illegal character: :
(standard_in) 1: illegal character: :
(standard_in) 1: illegal character: $
(standard_in) 1: syntax error
(standard_in) 1: illegal character: :
(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: illegal character: :

어떤 도움이라도 대단히 감사하겠습니다!

죄송합니다. 최소한의 작업 예제를 만들려고 시도하는 동안 문제가 내 코드의 다른 곳에 있다는 것을 깨달았습니다.

답변1

time서브셸을 사용하여 출력을 개별적으로 캡처 할 수 있습니다.아니요변수를 사용하여 명령을 추상화합니다. 간략하게 간단한 예를 들면 다음과 같습니다.

$ time ( echo "Hello" > example.out 2> example.err ) > time.out 2> time.err
$ ls *{out,err}
example.err example.out time.err    time.out
$ cat time.err

real    0m0.000s
user    0m0.000s
sys     0m0.000s
$ cat example.out
hello

관련 정보