2016-08-16 3 views
0

the tutorial on the Chisel official website for installation 다음에 설치가 올바르게 완료되었는지 테스트해야합니다. 이렇게하면이 오류를 얻을 :치즐 설치 오류

set -e -o pipefail; "sbt" -Dsbt.log.noformat=true -DchiselVersion="2.+" "run Parity --genHarness --compile --test --backend c --vcd --targetDir /home/me/chisel-tutorial/generated/examples " | tee /home/me/chisel-tutorial/generated/examples/Parity.out 
/bin/bash: sbt: command not found 
make: *** [/home/me/chisel-tutorial/generated/examples/Parity.out] Error 127 

이 제안되어 메이크에 SHELL=/bin/bash를 추가 할 수있는 동일한 문제 here에 관한 또 다른 질문이 있습니다. 그건 나를 위해 작동하지 않았다. 또 다른 제안은 set -e -o pipefail을 제거하는 것입니다.이 제안은 실제로 작동하지만 그 옵션을 제거해도 괜찮습니까? 그것은 무엇을합니까?

Edit_1 : 나는 SBT를 설치하고 PATH 변수에 해당 경로를 추가 한

. -o 옵션에서 삭제하여

$(objdir)/%.dot: %.scala 
      set -e -o pipefail; "$(SBT)" $(SBT_FLAGS) "run $(notdir $(basename $<)) --backend dot --targetDir $(objdir) $(CHISEL_FLAGS)" 

$(objdir)/%.out: %.scala 
      set -e -o pipefail; "$(SBT)" $(SBT_FLAGS) "run $(notdir $(basename $<)) --genHarness --compile --test --backend c --vcd --targetDir $(objdir) $(CHISEL_FLAGS)" | tee [email protected] 

: 나는 파일 suffix.mk의이 부분을 편집하는 경우 make Parity.out

set -e -o pipefail; "sbt" -Dsbt.log.noformat=true -DchiselVersion="2.+" "run Parity --genHarness --compile --test --backend c --vcd --targetDir /home/me/chisel-tutorial/generated/examples " | tee /home/me/chisel-tutorial/generated/examples/Parity.out 
/bin/sh: 1: set: Illegal option -o pipefail 
make: *** [/home/me/chisel-tutorial/generated/examples/Parity.out] Error 2 

을 실행할 때

$ which sbt 
/usr/bin/sbt 

그러나 여전히이 오류가 무엇입니까 set -e -o pipefail이 작동하면 $ make Parity.out을 실행 한 후 PASSED 및 [success] 메시지가 나타납니다. 그래서 무슨 일이 일어나고있는거야?

Edit_2 :

나는 메이크에 SHELL=/bin/bash을 추가 한 후 지금은 잘 작동, 그래서 첫째 나다니엘은 다음 SHELL=/bin/bash을 포함하도록 메이크 파일을 편집 지적 SBT 한하지의 문제였다.

답변

0

set -e -o pipefail은 bash 스크립트의 실행이 예상대로 작동하는지 확인하고, 오류가 발생하면 즉시 중단합니다 (이후 단계는 아님). 그것을 제거하는 것은 효과가있을 수 있습니다 - 그러나 실패가 있다면 그것은 삼켜 버리고 그것이 깨졌습니다 사실을 숨길 수 있습니다.

/bin/bash: sbt: command not found

당신이 sbt이 시스템에 설치되어 수행

하지만 문제는 다른 문제 붉은 청어의 비트 만들고, 여기에있다 생각하십니까? 스크립트를 실행하는 사용자로 which sbt을 실행하십시오. 예를 들어, 내 시스템에 : 당신이 당신의 시스템에없는 경우

$ which sbt 
/opt/local/bin/sbt 

는 아무것도 which을 실행하여 반환되지 않습니다.

스크립트는 분명히 sbt에 액세스해야하며 찾을 수 없을 때 실패합니다. 시스템에 설치 한 경우 스크립트를 실행하는 사용자와 해당 파일에 대한 액세스간에 불일치가 있습니다. 스크립트를 실행하는 방법에 대한 자세한 정보를 게시해야합니다.이 경우 변수를 업데이트하여 sbt 실행 파일을 찾을 수 있어야합니다.

이 문제를 해결 한 후에도 여전히 문제가있는 경우 다른 터미널 유형이 아닌 bash에서 실행되고 있는지 확인해야합니다. 그 이유는 bashset -o pipefail을 지원하지만 다른 많은 단말기는 지원하지 않기 때문입니다.우리는이 때문에 오류 메시지의 경우 생각되는 : 여기

/bin/sh: 1: set: Illegal option -o pipefail

우리는 /bin/sh가 (쉘)이 프로그램에 의해 호출되는 것을 알 수있다. /bin/sh이 특정 셸을 가리키고 있는지 확인하려면 ls -l /bin/sh을 사용하십시오. bash 쉘에 지정되어 있지 않으면, 다시 작성해야합니다 (조심하십시오! 이것은 아마도 다른 문제입니다). 또는 특정 쉘을 사용하도록 Scala 프로그램을 지정해야합니다.

+0

수정 사항을 볼 수 있습니까? – akurd

+0

@akurd 내 편집을 참조하십시오. –

+1

그것은 dash :/bin/sh -> dash에 링크하고 있습니다. SHELL =/bin/bash를 Makefile에 추가하면 문제가 해결됩니다. 나는 이것이 이것을 해결 된 것으로 표시 할 것이라고 생각한다. 추가 할 사항이 있으면 나중에 참조 할 수 있도록하십시오. – akurd