From b4ecd9d91f2bf9ddbf3f43c0803f26d60730d8a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Guti=C3=A9rrez-Aguado?= Date: Mon, 9 Oct 2023 14:03:44 +0200 Subject: [PATCH] Changes to add a bash magic --- docs/magics.md | 29 +++++++++++++++++- .../github/spencerpark/ijava/JavaKernel.java | 2 ++ .../spencerpark/ijava/magics/BashMagics.java | 30 +++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/github/spencerpark/ijava/magics/BashMagics.java diff --git a/docs/magics.md b/docs/magics.md index f6bf8ea..842b993 100644 --- a/docs/magics.md +++ b/docs/magics.md @@ -124,4 +124,31 @@ The cell magic is designed to make it very simple to copy and paste from any REA jupyter-jvm-basekernel 2.0.0-SNAPSHOT - ``` \ No newline at end of file + ``` + + +### bash + +Runs a shell command and show the output + +###### Line magic + +* **arguments**: + * command and list of arguments of the command + + Ex: To get a resource from an URL and save to a file in `/tmp` + + ``` + %bash wget URL -O /tmp/file + ``` + + Ex: to list files in a folder + ``` + %bash ls folder + ``` + + This can be integrated with other Java sentences: + ```java + System.out.println("Contents of folder:"); + %bash ls folder + ``` diff --git a/src/main/java/io/github/spencerpark/ijava/JavaKernel.java b/src/main/java/io/github/spencerpark/ijava/JavaKernel.java index b61d3af..7cb9b83 100644 --- a/src/main/java/io/github/spencerpark/ijava/JavaKernel.java +++ b/src/main/java/io/github/spencerpark/ijava/JavaKernel.java @@ -26,6 +26,7 @@ import io.github.spencerpark.ijava.execution.*; import io.github.spencerpark.ijava.magics.ClasspathMagics; import io.github.spencerpark.ijava.magics.MavenResolver; +import io.github.spencerpark.ijava.magics.BashMagics; import io.github.spencerpark.jupyter.kernel.BaseKernel; import io.github.spencerpark.jupyter.kernel.LanguageInfo; import io.github.spencerpark.jupyter.kernel.ReplacementOptions; @@ -95,6 +96,7 @@ public JavaKernel() { this.magics.registerMagics(this.mavenResolver); this.magics.registerMagics(new ClasspathMagics(this::addToClasspath)); this.magics.registerMagics(new Load(List.of(".jsh", ".jshell", ".java", ".ijava"), this::eval)); + this.magics.registerMagics(new BashMagics()); this.languageInfo = new LanguageInfo.Builder("Java") .version(Runtime.version().toString()) diff --git a/src/main/java/io/github/spencerpark/ijava/magics/BashMagics.java b/src/main/java/io/github/spencerpark/ijava/magics/BashMagics.java new file mode 100644 index 0000000..89ec024 --- /dev/null +++ b/src/main/java/io/github/spencerpark/ijava/magics/BashMagics.java @@ -0,0 +1,30 @@ + +package io.github.spencerpark.ijava.magics; + +import io.github.spencerpark.jupyter.kernel.magic.registry.LineMagic; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.List; + +public class BashMagics { + + @LineMagic(aliases={"bash","shell"}) + public void bash(List args) { + ProcessBuilder pb = new ProcessBuilder(args); + StringBuffer sb = new StringBuffer(); + try { + Process p = pb.start(); + BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(), "UTF-8")); + p.waitFor(); + String cad = ""; + while ((cad = br.readLine()) != null){ + sb.append(cad); + sb.append('\n'); + } + br.close(); + } catch (Exception ex) { + ex.printStackTrace(); + } + System.out.println(sb.toString()); + } +}