2010-11-29 5 views
0

나는 내가 Cygwin에서에 다음 명령을 입력 할 때 :배쉬 스크립트 명령을 실행

bin/nutch index crawl/crawldb crawl/linkdb crawl/segment/* 

다음 바이너리가 잘 작동합니다. 내 bash 스크립트에 똑같은 줄을 넣을 때 :

#!/bin/bash/ 
bin/nutch index crawl/crawldb crawl/linkdb crawl/segment/* 

일부 파일이 존재하지 않는다는 오류가 발생합니다. 이것은 내가 실행중인 프로그램 인 Nutch와 관련이있을 수 있지만 스크립트에서 명령을 호출하는 방법과 관련이 있다고 생각합니다. 무엇이 잘못되었거나이를 해결하는 방법에 대한 아이디어가 있습니까? (예 내가 사용 탭 완성)

편집 :

스크립트 :

$ pwd 
/home/Dan/apache-nutch-1.2 
$ ./nutch.sh 

내가 갖는 출력은 다음과 같습니다 :

#!/bin/bash 
/home/Dan/apache-nutch-1.2/bin/nutch index crawl/indexes crawl/crawldb crawl/linkdb crawl/segments/* 

내가 명령을 실행
Indexer: starting at 2010-11-29 15:15:44 
Indexer: org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/C:/cygwin/home/Dan/apache-nutch-1.2/ 
/crawl_fetch 
Input path does not exist: file:/C:/cygwin/home/Dan/apache-nutch-1.2/ 
/crawl_parse 
Input path does not exist: file:/C:/cygwin/home/Dan/apache-nutch-1.2/ 
/parse_data 
Input path does not exist: file:/C:/cygwin/home/Dan/apache-nutch-1.2/ 
/parse_text 
    at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:190) 
    at org.apache.hadoop.mapred.SequenceFileInputFormat.listStatus(SequenceFileInputFormat.java:44) 
    at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:201) 
    at org.apache.hadoop.mapred.JobClient.writeOldSplits(JobClient.java:810) 
    at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:781) 
    at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:730) 
    at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1249) 
    at org.apache.nutch.indexer.Indexer.index(Indexer.java:76) 
    at org.apache.nutch.indexer.Indexer.run(Indexer.java:97) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) 
    at org.apache.nutch.indexer.Indexer.main(Indexer.java:106) 

감사합니다. ~ DS

+0

'/ bin/bash'가 올바른 경로인지 확인하십시오. 또한'bin/nutch'는 상대 경로입니다. – khachik

+0

이 bin/nutch 디렉토리를 사용하여 스크립트에서 다른 명령을 테스트했으며 정상적으로 작동했습니다. 나는 이것들이 모두 괜찮다는 것을 의미하기 위해 이것을 잡는다. 스크립트에서 명령을 실행하는 것과 명령 행에서 명령을 실행하는 것의 차이점은 무엇입니까? 2 사이의 간격을 완전히 메꿀 수있는 방법이 있습니까? –

+0

보고있는 스크립트와 o/p를 게시 할 수 있습니까? – abc

답변

1

두 가지 : 당신은 스크립트의 시작시의 오두막에서 "bash는"다음에 후행 슬래시를 가지고

  1. 는 - 그것은 단지 #!/bin/bash을 읽어야를 제거합니다. 또한 bash/bin에 있는지 다시 확인하십시오.
  2. 스크립트는 currect 폴더의 bin 디렉토리에서 nutch를 실행하려고 시도합니다. 따라서 $HOME에 있고 $HOME/bin/nutch 경로가 있다고 가정하면 괜찮습니다. 그러나 /tmp으로 변경하면 /tmp/bin/nutch과 같은 경로가 없으므로 실패합니다. 처음에는 너트에 전체 경로 이름을 지정하는 것이 좋습니다.
+0

사실/home/.../apache-nutch-1.2 /에서 "/ bin/nutch"라는 스크립트를 실행하고 있습니다. #!/bin/bash가 수정되었습니다. 아마도 상대방 주소에서 스크립트를 호출한다는 사실이 문제의 원인입니까? 어떻게 수정하겠습니까? –

관련 문제