2009-09-22 7 views
0

Java에서 Process 또는 ProcessBuilder 오브젝트를 사용하여 아래 bash 쉘 스크립트의 기능을 에뮬레이션하려고합니다. standard-in에 대한 리디렉션을 수행하는 방법이 100 % 명확하지 않습니다. 이것을 어떻게 할 수 있습니까?Java로 Bash 스크립트 이식하기

# 
# Redirect shell echo command from standard output to file 
# This will construct the input file 
# 
exec 1> $STDIN 
echo -e "$NFILE\n$GFILE\n$INPUT\n$OUTPUT\n$CAX" 
exec 1>&- 

# 
# Run executable redirecting standard in as the input file and output to a log file 
# 
"$EXE" < $STDIN >& $LOG 
+0

왜'exec 1> $ STDIN'입니까? 왜 그냥'echo -e '... "> $ STDIN' – mob

+0

@mobrule 확실하지 않습니다. 나는 그 대본을 물려 받았다. exec 1은 어떻게 다릅니 까? – javacavaj

답변

2

Process 개체 스트림은 오해의 소지가 있습니다. 당신은 프로세스 객체의 OutputStream에 쓸 필요가 있습니다. 의 표준 입출력 처리 (즉 stdin, 표준 출력, 표준 에러) 작업이 세 개의 스트림 (Process.getOutputStream()를 통해 부모 프로세스 로 리디렉션됩니다, 프로세스

다음 문서에서

.getInputStream(), Process.getErrorStream()).

는 또한, 프로세스 출력 및 표준 오류 동시에을 소비해야 그렇지 않으면 버퍼가 채워되고 프로세스가 차단됩니다. 자세한 내용은 here을 참조하십시오.