[ZEPPELIN-2903] Make setting of working directory to user-home optional for shell interpreter
### What is this PR for?
With ZEPPELIN-2841, it had changed the default working directory of Shell Interpreter from the relative path where Zeppelin is running to user-home. This is to make the configuration optional.
### What type of PR is it?
[Improvement]
### What is the Jira issue?
* https://issues.apache.org/jira/browse/ZEPPELIN-2903
### How should this be tested?
by default when the user runs shell interpreter and executes `pwd` will the path where Zeppelin server is running, but when `shell.working.directory.user.home` is set to true in Zeppelin's interpreter setting, it will point to the user's home directory by which the interpreter is running.
Author: Prabhjyot Singh <prabhjyotsingh@gmail.com>
Closes #2566 from prabhjyotsingh/ZEPPELIN-2903 and squashes the following commits:
9934df52a [Prabhjyot Singh] add doc for shell.working.directory.user.home
9164ed2c0 [Prabhjyot Singh] Make setting of working directory to user-home optional for shell interpreter
(cherry picked from commit 629e21769e2bda6c3e8d86f650f1ee99e68d917b)
Signed-off-by: Prabhjyot Singh <prabhjyotsingh@gmail.com>
diff --git a/docs/interpreter/shell.md b/docs/interpreter/shell.md
index b4b36dd..a4ca1de 100644
--- a/docs/interpreter/shell.md
+++ b/docs/interpreter/shell.md
@@ -44,6 +44,11 @@
<td>Shell command time out in millisecs</td>
</tr>
<tr>
+ <td>shell.working.directory.user.home</td>
+ <td>false</td>
+ <td>If this set to true, the shell's working directory will be set to user home</td>
+ </tr>
+ <tr>
<td>zeppelin.shell.auth.type</td>
<td></td>
<td>Types of authentications' methods supported are SIMPLE, and KERBEROS</td>
diff --git a/shell/src/main/java/org/apache/zeppelin/shell/ShellInterpreter.java b/shell/src/main/java/org/apache/zeppelin/shell/ShellInterpreter.java
index 8cf60a7..dd1176b 100644
--- a/shell/src/main/java/org/apache/zeppelin/shell/ShellInterpreter.java
+++ b/shell/src/main/java/org/apache/zeppelin/shell/ShellInterpreter.java
@@ -48,6 +48,7 @@
public class ShellInterpreter extends Interpreter {
private static final Logger LOGGER = LoggerFactory.getLogger(ShellInterpreter.class);
private static final String TIMEOUT_PROPERTY = "shell.command.timeout.millisecs";
+ private static final String DIRECTORY_USER_HOME = "shell.working.directory.user.home";
private final boolean isWindows = System.getProperty("os.name").startsWith("Windows");
private final String shell = isWindows ? "cmd /c" : "bash -c";
ConcurrentHashMap<String, DefaultExecutor> executors;
@@ -89,7 +90,10 @@
contextInterpreter.out, contextInterpreter.out));
executor.setWatchdog(new ExecuteWatchdog(Long.valueOf(getProperty(TIMEOUT_PROPERTY))));
executors.put(contextInterpreter.getParagraphId(), executor);
- executor.setWorkingDirectory(new File(System.getProperty("user.home")));
+ if (Boolean.valueOf(getProperty(DIRECTORY_USER_HOME))) {
+ executor.setWorkingDirectory(new File(System.getProperty("user.home")));
+ }
+
int exitVal = executor.execute(cmdLine);
LOGGER.info("Paragraph " + contextInterpreter.getParagraphId()
+ " return with exit value: " + exitVal);
diff --git a/shell/src/main/resources/interpreter-setting.json b/shell/src/main/resources/interpreter-setting.json
index c12b545..11b2c32 100644
--- a/shell/src/main/resources/interpreter-setting.json
+++ b/shell/src/main/resources/interpreter-setting.json
@@ -10,6 +10,13 @@
"defaultValue": "60000",
"description": "Shell command time out in millisecs. Default = 60000"
},
+ "shell.working.directory.user.home": {
+ "envName": "SHELL_WORKING_DIRECTORY_USER_HOME",
+ "propertyName": "shell.working.directory.user.home",
+ "defaultValue": false,
+ "description": "If this set to true, the shell's working directory will be set to user home",
+ "type": "checkbox"
+ },
"zeppelin.shell.auth.type": {
"envName": null,
"propertyName": "zeppelin.shell.auth.type",