2009-08-04 11 views
1

다음은 인수/입력 파일 에 실행 파일을 실행하기 위해 작성한 스크립트입니다. input.파일을 읽는 중 bash 스크립트의 오류가 발생했습니다.

final_file이라는 다른 파일에서 표준 입력을 받아서 outfile이라는 파일로 출력합니다. final_file (즉, 91 개의 다른 표준 공백 구분 입력)에 91 줄이 있으므로 bash 스크립트는 ./runnable 입력을 91 번 호출해야합니다.

그러나 나는 그것이 단지 한 번만 부르는 이유를 잘 모릅니다. 무슨 일이 일어나고 있는지에 대한 제안은 뭐니? 명확히하기 위해

#!/bin/bash 

OUTFILE=outfile 
(

a=0 

while read line 
do 

    ./runnable input 
    echo "This is line number: $a" 
    a='expr $a+ 1' 

done<final_file 

) >$OUTFILE 

final_file 등등

_ _DATA_ _ 
2,9,2,9,10,0,38 
2,9,2,10,11,0,0 
2,9,2,11,12,0,0 
2,9,2,12,13,0,0 
2,9,2,13,0,1,4 
2,9,2,13,3,2,2 

과 같습니다. 한 번에 한 라인 씩 표준 입력입니다. final_file의 행 수는 표준 입력이 제공된 횟수에 해당합니다. 따라서 위의 경우 스크립트는 여섯 줄만큼 6 번 실행해야합니다.

답변

3

나는 ./runnable가 표준 입력을 통해 모든 방법을 추구하는 것이 위험을 무릅 것이다. 입력이 read으로 남아 있지 않은 경우, while 루프는 한 번의 반복 후에 끝납니다.

추론 : 귀하의 예를 작품 저(TM), final_file을 위해 내가 (/etc/services)가 일이 파일을 대체하고 ./runnable를 호출하는 라인을 주석. 나는 단순히 표준 입력을 추구하고 폐기 한 라이너로 ./runnable 호출을 대체 할 경우, 다른 한편으로

는, (예를 들어, cat - > /dev/null 또는 perl -ne 1)는, 당신이 설명하는 동작을 얻을.

(당신이 expr에 역 따옴표 또는 전화 주변 $()를 원하는합니다.)

0
  • 일부 디버깅 출력의 경우 -x 옵션을 사용하여 쉘 스크립트를 실행하십시오.
  • while read line; do echo $line; done 공간이 분리 된 입력을 읽지 않는 당신의 while read line; do
  • 주 후 echo $line 추가, 그것은 라인 분리 입력 읽습니다.
+0

@Zan : 그 스크립트가 'finalfile'휴식하지의 첫 번째 라인을 읽고 있다는 사실을 확인 하. 그러나 나는이 문제를 해결하는 방법이나 그것이 무엇을하고 있는지를 알고 싶다. – shubster

관련 문제