1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.shared.utils.cli.shell;
20
21 import java.util.ArrayList;
22 import java.util.List;
23
24 import org.apache.maven.shared.utils.Os;
25
26
27
28
29 public class BourneShell extends Shell {
30
31
32
33
34 public BourneShell() {
35 setUnconditionalQuoting(true);
36 setShellCommand("/bin/sh");
37 setArgumentQuoteDelimiter('\'');
38 setExecutableQuoteDelimiter('\'');
39 setSingleQuotedArgumentEscaped(true);
40 setSingleQuotedExecutableEscaped(false);
41 setQuotedExecutableEnabled(true);
42 }
43
44
45
46
47 public String getExecutable() {
48 if (Os.isFamily(Os.FAMILY_WINDOWS)) {
49 return super.getExecutable();
50 }
51
52 return quoteOneItem(super.getExecutable(), true);
53 }
54
55
56 public List<String> getShellArgsList() {
57 List<String> shellArgs = new ArrayList<String>();
58 List<String> existingShellArgs = super.getShellArgsList();
59
60 if ((existingShellArgs != null) && !existingShellArgs.isEmpty()) {
61 shellArgs.addAll(existingShellArgs);
62 }
63
64 shellArgs.add("-c");
65
66 return shellArgs;
67 }
68
69
70 public String[] getShellArgs() {
71 String[] shellArgs = super.getShellArgs();
72 if (shellArgs == null) {
73 shellArgs = new String[0];
74 }
75
76 if ((shellArgs.length > 0) && !shellArgs[shellArgs.length - 1].equals("-c")) {
77 String[] newArgs = new String[shellArgs.length + 1];
78
79 System.arraycopy(shellArgs, 0, newArgs, 0, shellArgs.length);
80 newArgs[shellArgs.length] = "-c";
81
82 shellArgs = newArgs;
83 }
84
85 return shellArgs;
86 }
87
88
89 protected String getExecutionPreamble() {
90 if (getWorkingDirectoryAsString() == null) {
91 return null;
92 }
93
94 String dir = getWorkingDirectoryAsString();
95
96 return "cd " + quoteOneItem(dir, false) + " && ";
97 }
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115 protected String quoteOneItem(String path, boolean isExecutable) {
116 if (path == null) {
117 return null;
118 }
119
120 return "'" + path.replace("'", "'\"'\"'") + "'";
121 }
122 }