2014-02-13 3 views
0

나는 테스트를 자동화하는 데 도움이되는 Ruby 스크립트를 사용 해왔다. 이 잘 작동명령 줄 및 리디렉션이 작동하지 않습니까?

`./program_name #{params} > #{temp_file}` 

, 어떻게 파일에 모두 STDOUT 및 STDERR 리디렉션하고 싶습니다 :이 같은 파일에 프로그램의 출력을 리디렉션하고이 스크립트의 일환으로. I는 다음과 같이 할 것이다 :

`./program_name #{params} &> #{temp_file}` 

& 추가하는 데, 임시 파일은 더 이상 출력을받지 않습니다.

&> 연산자는 명령 줄에서 사용할 때 예상대로 작동하지만 루비 스크립트에서만 문제가 발생하는 것으로 보입니다.

이것이 어떤 이유 일 수 있으며 문제를 해결하는 방법은 무엇입니까?

+1

당신은 shebang에서'/ bin/sh'를 사용하고 있습니까? '/ bin/bash'를 사용하십시오. – Kevin

+1

'./program_name # {params}> # {temp_file} 2> & 1'을 대신 사용해보십시오. – devnull

+0

'&>'은 쉘이나 bash 버전에 따라 작동하거나 작동하지 않을 수 있습니다. – devnull

답변

3

&>bashism입니다. 단순히 POSIX 리디렉션을 사용하십시오 :

`./program_name #{params} >#{temp_file} 2>&1` 
+1

리다이렉트를 되 돌리는 것이 필요합니다 :'{>> {{temp_file} 2> & 1' - stdout을 먼저 리디렉션 한 다음 stdout이 가리키는 파일로 stderr를 리다이렉션하십시오. –

+0

고마워, 네가 맞아. – l0b0

+0

Kindof가 OP에서 non [tag : bash] 쉘 스크립트를 실행했을 가능성이 가장 큰 문제를 해결합니다. – BroSlow

관련 문제