Ошибка установки долота

Следуя руководству по установке на официальном сайте Chisel, я пришел до точки, где я должен проверить, правильно ли была выполнена установка. Это приводит к ошибке:

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 в Makefile. У меня это не сработало. Другое предложение - удалить set -e -o pipefail: это предложение действительно работает, но можно ли удалить эту опцию? Что это делает?

Edit_1:

Я установил sbt и добавил его путь в переменную PATH.

$ which sbt
/usr/bin/sbt

Но все же я получаю эту ошибку при запуске 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

Если я отредактирую эту часть файла suffix.mk:

$(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 $@

Удалив параметр -o в set -e -o pipefail, он работает, я получаю сообщение ПРОШЕЛ и [успех] после запуска $ make Parity.out. Так, что происходит?

Edit_2:

Теперь он работает нормально после того, как я добавил SHELL=/bin/bash в Makefile, поэтому сначала проблема заключалась в отсутствии sbt, как указал Натаниэль, а затем при редактировании Makefile для включения SHELL=/bin/bash.


person Ammar Kurd    schedule 16.08.2016    source источник


Ответы (1)


set -e -o pipefail - это способ убедиться, что выполнение сценария bash работает так, как ожидалось, и что в случае сбоя оно немедленно останавливается (а не на более позднем этапе). Удаление может сработать, но в случае поломки его можно проглотить и скрыть тот факт, что он сломан.

Но я думаю, что ваша проблема здесь, что делает другой вопрос отвлекающим маневром:

/ bin / bash: sbt: команда не найдена

Установлено ли в вашей системе sbt? Запустите which sbt от имени пользователя, выполняющего сценарий. Например, в моей системе:

$ which sbt
/opt/local/bin/sbt

Если в вашей системе его нет, запуск which не вернет ничего.

Сценарию явно нужен доступ к sbt, и он терпит неудачу, когда не находит его. Если он у вас есть в вашей системе, то есть несоответствие между пользователем, запускающим скрипт, и доступом к этому файлу. Вам нужно будет опубликовать дополнительную информацию о том, как вы выполняете сценарий: в этом случае вам, вероятно, придется обновить свои PATH переменные, чтобы иметь возможность найти исполняемый файл sbt.

Учитывая, что после исправления у вас все еще есть проблема, вы должны убедиться, что вы работаете в bash, а не в другом типе терминала. Причина этого в том, что bash поддерживает set -o pipefail, а многие другие терминалы - нет. Мы подозреваем, что это могло быть из-за сообщений об ошибках:

/ bin / sh: 1: set: недопустимый параметр -o pipefail

Здесь мы видим, что /bin/sh (оболочка) вызывается программой. Используйте ls -l /bin/sh, чтобы определить, указывает ли ваш /bin/sh на конкретную оболочку. Если он не указывает на bash оболочку, то вам нужно либо перенаправить его (будьте осторожны! Это, вероятно, другой вопрос сам по себе), либо нужно указать вашей программе Scala использовать конкретную оболочку.

person Nathaniel Ford    schedule 17.08.2016
comment
он связан с dash: / bin / sh - ›dash, при добавлении SHELL = / bin / bash в Makefile проблема решается. Я думаю, что отмечу это как решенное. Если вам есть что добавить, сделайте это для использования в будущем. - person Ammar Kurd; 18.08.2016