Команды запускаются в терминале, но не внутри скрипта bash - PullRequest
0 голосов
/ 01 июля 2018

Я новичок в Linux, но я делаю учебник для Antlr4. Недавно у меня возникла проблема. Когда я пытаюсь настроить свой проект Antlr4, я запускаю следующие команды в терминале:

antlr4 MyGram.g4
javac *.java
grun MyGram prog test.in
dot -Tpdf test.dot > test.pdf

Все работает нормально и создает PDF-файл, показывающий дерево разбора. Однако, когда я помещаю эти команды в скрипт bash, называемый build.sh:

#!/bin/bash

antlr4 MyGram.g4
javac *.java
grun MyGram prog test.in
dot -Tpdf test.dot > test.pdf

и затем выполните команду: ./build.sh и я получаю следующие ошибки, и файл PDF не создается:

./build.sh: line 3: antlr4: command not found
javac: file not found: *.java
Usage: javac <options> <source files>
use -help for a list of possible options
./build.sh: line 5: grun: command not found
Error: dot: can't open test.dot

Может кто-нибудь объяснить, почему я получаю эти ошибки? Я использую Ubuntu 18.04 на VMware Workstation 14 Player.

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

antlr4 и grun - это псевдонимы, которые вы определили в своем командном окне.

Когда вы запускаете свой скрипт, вы находитесь в другой среде.

Так что вы должны либо:

  1. определите ваши псевдонимы в начале вашего скрипта
  2. не использовать псевдонимы в вашем скрипте

Я согласен с комментарием @Tejas: вы должны использовать полные пути в вашем скрипте (гораздо проще в обслуживании)

0 голосов
/ 01 июля 2018

По какой-то причине antlr4 и grun не входят в ваш $ PATH.

type antlr4 

покажет вам, где это. Добавьте это к вашему PATH в вашем .bashrc или .profile

...