2016-08-16 7 views
0

the tutorial on the Chisel official website for installationの後に、インストールが正しく行われたかどうかテストする必要があります。そうすることで、このエラーを生成:メイクファイルにSHELL=/bin/bashを追加するための提案がなされているのと同じ問題here、に関する別の質問はチゼルのインストールエラー

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 

があります。それは私にとってはうまくいかなかった。もう一つの提案はset -e -o pipefailを削除することです:この提案は実際には動作しますが、そのオプションを削除することはできますか?それは何をするためのものか?

Edit_1:

私は、SBTをインストールし、PATH変数にそのパスを追加しました。

$ which sbt 
/usr/bin/sbt 

しかし、私は、ファイル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 

を実行するときに、まだ私はこのエラーを取得しています:で-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] 

set -e -o pipefailが動作し、$ make Parity.outを実行した後、PASSEDと[success]メッセージが表示されます。では何が起こっているのですか?

Edit_2:

私はMakefileのにSHELL=/bin/bashを追加した後に、それは最初のナサニエルが、その後SHELL=/bin/bashを含めるようにMakefileを編集指摘したように、SBTがないの問題だったので、それは、今、正常に動作しています。

答えて

0

set -e -o pipefailは、bashスクリプトの実行が期待どおりに行われ、障害が発生した場合には、後の段階ではなく直ちに停止することを確認する方法です。それを取り除くことはうまくいくかもしれませんが、失敗があればそれは飲み込まれ、壊れているという事実を隠すかもしれません。

しかし、私はあなたの問題は他の質問に赤いニシンのビットを作り、ここにあると思う:

/bin/bash: sbt: command not found

は、あなたのシステムにインストールsbtを持っていますか?スクリプトを実行するユーザーとしてwhich sbtを実行します。例えば、私のシステム上:あなたのシステム上でそれを持っていない場合

$ which sbt 
/opt/local/bin/sbt 

、何もwhichを実行することによって返されません。

スクリプトは明らかにsbtにアクセスする必要があり、見つからない場合は失敗しています。あなたのシステムでそれを持っていれば、スクリプトを実行しているユーザーとそのファイルへのアクセスの間に不一致があります。スクリプトをどのように実行しているかについての詳細情報を投稿する必要があります:この場合、PATH変数を更新してsbt実行ファイルが見つかるようにする必要があります。

これを修正した後でもまだ問題がある場合、別の端末タイプではなくbashで実行していることを確認する必要があります。これは、bashset -o pipefailをサポートしていますが、他の多くの端末ではサポートされていないためです。私たちは、これがため、エラーメッセージのケースであるかもしれない疑い:

ここ

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

我々は/bin/sh(シェル)プログラムによって呼び出されていることがわかります。 ls -l /bin/shを使用して、/bin/shが特定のシェルを指しているかどうかを判断してください。もしそれがbashシェルに指されていなければ、あなたはそれをrepointする必要があります(これはおそらく別の問題です)、あるいは特定のシェルを使うようにScalaプログラムを指定する必要があります。

+0

あなたは編集を見ることができますか? – akurd

+0

@akurd私の編集を参照してください。 –

+1

これはダッシュにリンクしています:/ bin/sh - >ダッシュ、SHELL =/bin/bashをMakefileに追加すると問題が解決します。私はこれを解決済みとしてマークすると思います。追加するものがあれば、後で参考にしてください。 – akurd