Skip to content

Here document in shell script cannot be executed due to progress bar problem #2709

@PaulKlint

Description

@PaulKlint

Describe the bug

I want to run Rascal on the command line and include Rascal input directly in the shell script as a so-called here document. This gives a java.lang.StringIndexOutOfBoundsException in the progress bar.

To Reproduce

Define runTest.sh as:

java -Xmx1G -Xss32m -jar target/rascal-0.42.1-SNAPSHOT.jar <<EOF
import IO;
println("***");
EOF

Now run sh runTest.sh as follows:

% sh runTest.sh 
[INFO] Bootstrap |std:///| = |jar+file:///Users/paulklint/git/rascal/target/rascal-0.42.1-SNAPSHOT.jar!/org/rascalmpl/library|
[INFO] Bootstrap runtime   = |file:///Users/paulklint/git/rascal/target/rascal-0.42.1-SNAPSHOT.jar|
[INFO] pom.xml: Rascal version is 0.42.1-SNAPSHOT
[INFO] pom.xml: Detected Rascal project self-application
[INFO] pom.xml: Project root is |file:///Users/paulklint/git/rascal/|
[INFO] pom.xml: Bin folder   is |file:///Users/paulklint/git/rascal/target/classes|
[INFO] pom.xml: Source module path is:
  - |std:///|
  - |file:///Users/paulklint/git/rascal/src/org/rascalmpl/compiler|
  - |file:///Users/paulklint/git/rascal/src/org/rascalmpl/tutor|
  - |file:///Users/paulklint/git/rascal/test/org/rascalmpl/test/data|
  - |file:///Users/paulklint/git/rascal/test/org/rascalmpl/benchmark|
  - |mvn://org.rascalmpl--typepal--0.16.6-RC2|
[INFO] pom.xml: Library module (and classes) path is:
  - |file:///Users/paulklint/git/rascal/target/rascal-0.42.1-SNAPSHOT.jar|
java.lang.StringIndexOutOfBoundsException: begin 0, end -19, length 15
(internal error)
	at $(|main:///_dollar_|)

java.lang.StringIndexOutOfBoundsException: begin 0, end -19, length 15
	at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3319)
	at java.base/java.lang.String.substring(String.java:1874)
	at org.rascalmpl.repl.TerminalProgressBarMonitor$ProgressBar.write(TerminalProgressBarMonitor.java:408)
	at org.rascalmpl.repl.TerminalProgressBarMonitor.printBars(TerminalProgressBarMonitor.java:478)
	at org.rascalmpl.repl.TerminalProgressBarMonitor.jobStart(TerminalProgressBarMonitor.java:536)
	at org.rascalmpl.ideservices.BasicIDEServices.jobStart(BasicIDEServices.java:125)
	at org.rascalmpl.interpreter.Evaluator.jobStart(Evaluator.java:351)
	at org.rascalmpl.debug.IRascalMonitor.jobStart(IRascalMonitor.java:40)
	at org.rascalmpl.debug.IRascalMonitor.job(IRascalMonitor.java:101)
	at org.rascalmpl.interpreter.Evaluator.eval(Evaluator.java:1065)
	at org.rascalmpl.interpreter.Evaluator.eval(Evaluator.java:924)
	at org.rascalmpl.interpreter.Evaluator.eval(Evaluator.java:875)
	at org.rascalmpl.repl.rascal.RascalInterpreterREPL.handleInput(RascalInterpreterREPL.java:236)
	at org.rascalmpl.repl.rascal.RascalReplServices.handleInput(RascalReplServices.java:109)
	at org.rascalmpl.repl.BaseREPL.handleInput(BaseREPL.java:217)
	at org.rascalmpl.repl.BaseREPL.run(BaseREPL.java:134)
	at org.rascalmpl.shell.REPLRunner.run(REPLRunner.java:30)
	at org.rascalmpl.shell.RascalShell.main(RascalShell.java:65)

rascal>|prompt:///|(0,7,<1,0>,<1,7>): Undeclared variable: println
Advice: |https://www.rascal-mpl.org/docs/Rascal/Errors/CompileTimeErrors/UndeclaredVariable|
rascal>Quiting REPL

Expected behavior
Proper execution of the print statement in the example above.

Additional context
This works well when the Rascal statement are entered manually.

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions