1- #! /usr/bin/env sh
1+ #! /bin/sh
2+ 3+ # 
4+ #  Copyright © 2015-2021 the original authors.
5+ # 
6+ #  Licensed under the Apache License, Version 2.0 (the "License");
7+ #  you may not use this file except in compliance with the License.
8+ #  You may obtain a copy of the License at
9+ # 
10+ #  https://www.apache.org/licenses/LICENSE-2.0
11+ # 
12+ #  Unless required by applicable law or agreed to in writing, software
13+ #  distributed under the License is distributed on an "AS IS" BASIS,
14+ #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+ #  See the License for the specific language governing permissions and
16+ #  limitations under the License.
17+ # 
218
319# #############################################################################
4- # #
5- # # Gradle start up script for UN*X
6- # #
20+ # 
21+ #  Gradle start up script for POSIX generated by Gradle.
22+ # 
23+ #  Important for running:
24+ # 
25+ #  (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
26+ #  noncompliant, but you have some other compliant shell such as ksh or
27+ #  bash, then to run this script, type that shell name before the whole
28+ #  command line, like:
29+ # 
30+ #  ksh Gradle
31+ # 
32+ #  Busybox and similar reduced shells will NOT work, because this script
33+ #  requires all of these POSIX shell features:
34+ #  * functions;
35+ #  * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
36+ #  «${var#prefix}», «${var%suffix}», and «$( cmd )»;
37+ #  * compound commands having a testable exit status, especially «case»;
38+ #  * various built-in commands including «command», «set», and «ulimit».
39+ # 
40+ #  Important for patching:
41+ # 
42+ #  (2) This script targets any POSIX shell, so it avoids extensions provided
43+ #  by Bash, Ksh, etc; in particular arrays are avoided.
44+ # 
45+ #  The "traditional" practice of packing multiple parameters into a
46+ #  space-separated string is a well documented source of bugs and security
47+ #  problems, so this is (mostly) avoided, by progressively accumulating
48+ #  options in "$@", and eventually passing that to Java.
49+ # 
50+ #  Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
51+ #  and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
52+ #  see the in-line comments for details.
53+ # 
54+ #  There are tweaks for specific operating systems such as AIX, CygWin,
55+ #  Darwin, MinGW, and NonStop.
56+ # 
57+ #  (3) This script is generated from the Groovy template
58+ #  https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
59+ #  within the Gradle project.
60+ # 
61+ #  You can find Gradle at https://github.com/gradle/gradle/.
62+ # 
763# #############################################################################
864
965#  Attempt to set APP_HOME
66+ 1067#  Resolve links: 0ドル may be a link
11- PRG=" 0ドル " 
12- #  Need this for relative symlinks.
13- while  [ -h  " $PRG "   ] ;  do 
14-  ls=` ls -ld " $PRG " ` 
15-  link=` expr " $ls "   :  ' .*-> \(.*\)$' ` 
16-  if  expr " $link "   :  ' /.*'   >  /dev/null;  then 
17-  PRG=" $link " 
18-  else 
19-  PRG=` dirname " $PRG " ` " /$link " 
20-  fi 
68+ app_path=0ドル 
69+ 70+ #  Need this for daisy-chained symlinks.
71+ while 
72+  APP_HOME=${app_path% " ${app_path##*/ } "  }  #  leaves a trailing /; empty if no leading path
73+  [ -h  " $app_path "   ]
74+ do 
75+  ls=$(  ls -ld " $app_path "   ) 
76+  link=${ls#* '  -> '  } 
77+  case  $link  in  # (
78+  /* ) app_path=$link  ;; # (
79+  * ) app_path=$APP_HOME$link  ;;
80+  esac 
2181done 
22- SAVED=" ` pwd` " 
23- cd  " ` dirname \" $PRG \" `  /"   > /dev/null
24- APP_HOME=" ` pwd -P` " 
25- cd  " $SAVED "   > /dev/null
82+ 83+ APP_HOME=$(  cd  " ${APP_HOME:- ./ } "   &&  pwd  -P )   ||  exit 
2684
2785APP_NAME=" Gradle" 
28- APP_BASE_NAME=` basename  " 0ドル " ` 
86+ APP_BASE_NAME=${0 ##*/ } 
2987
3088#  Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31- DEFAULT_JVM_OPTS=" " 
89+ DEFAULT_JVM_OPTS=' "-Xmx64m" "-Xms64m" ' 
3290
3391#  Use the maximum available, or set MAX_FD != -1 to use that value.
34- MAX_FD=" maximum" 
92+ MAX_FD=maximum
3593
3694warn  () {
3795 echo  " $* " 
38- }
96+ }>&2 
3997
4098die  () {
4199 echo 
42100 echo  " $* " 
43101 echo 
44102 exit  1
45- }
103+ }>&2 
46104
47105#  OS specific support (must be 'true' or 'false').
48106cygwin=false
49107msys=false
50108darwin=false
51109nonstop=false
52- case  " ` uname` "   in 
53-  CYGWIN*  )
54-  cygwin=true
55-  ;;
56-  Darwin*  )
57-  darwin=true
58-  ;;
59-  MINGW*  )
60-  msys=true
61-  ;;
62-  NONSTOP*  )
63-  nonstop=true
64-  ;;
110+ case  " $(  uname ) "   in  # (
111+  CYGWIN*  ) cygwin=true ;; # (
112+  Darwin*  ) darwin=true ;; # (
113+  MSYS*  | MINGW*  ) msys=true ;; # (
114+  NONSTOP*  ) nonstop=true ;;
65115esac 
66116
67117CLASSPATH=$APP_HOME /gradle/wrapper/gradle-wrapper.jar
68118
119+ 69120#  Determine the Java command to use to start the JVM.
70121if  [ -n  " $JAVA_HOME "   ] ;  then 
71122 if  [ -x  " $JAVA_HOME /jre/sh/java"   ] ;  then 
72123 #  IBM's JDK on AIX uses strange locations for the executables
73-  JAVACMD=" $JAVA_HOME /jre/sh/java" 
124+  JAVACMD=$JAVA_HOME /jre/sh/java
74125 else 
75-  JAVACMD=" $JAVA_HOME /bin/java" 
126+  JAVACMD=$JAVA_HOME /bin/java
76127 fi 
77128 if  [ !  -x  " $JAVACMD "   ] ;  then 
78129 die " ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 
@@ -81,92 +132,103 @@ Please set the JAVA_HOME variable in your environment to match the
81132location of your Java installation."  
82133 fi 
83134else 
84-  JAVACMD=" java" 
135+  JAVACMD=java
85136 which java > /dev/null 2>&1  ||  die " ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
86137
87138Please set the JAVA_HOME variable in your environment to match the 
88139location of your Java installation."  
89140fi 
90141
91142#  Increase the maximum file descriptors if we can.
92- if  [ " $cygwin "   =  " false"   -a  " $darwin "   =  " false"   -a  " $nonstop "   =  " false"   ] ;  then 
93-  MAX_FD_LIMIT=` ulimit -H -n` 
94-  if  [ $?  -eq  0 ] ;  then 
95-  if  [ " $MAX_FD "   =  " maximum"   -o  " $MAX_FD "   =  " max"   ] ;  then 
96-  MAX_FD=" $MAX_FD_LIMIT " 
97-  fi 
98-  ulimit  -n $MAX_FD 
99-  if  [ $?  -ne  0 ] ;  then 
100-  warn " Could not set maximum file descriptor limit: $MAX_FD " 
101-  fi 
102-  else 
103-  warn " Could not query maximum file descriptor limit: $MAX_FD_LIMIT " 
104-  fi 
143+ if  !  " $cygwin "   &&  !  " $darwin "   &&  !  " $nonstop "   ;  then 
144+  case  $MAX_FD  in  # (
145+  max* )
146+  MAX_FD=$(  ulimit  -H -n )   || 
147+  warn " Could not query maximum file descriptor limit" 
148+  esac 
149+  case  $MAX_FD  in  # (
150+  ' '   | soft) : ;; # (
151+  * )
152+  ulimit  -n " $MAX_FD "   || 
153+  warn " Could not set maximum file descriptor limit to $MAX_FD " 
154+  esac 
105155fi 
106156
107- #  For Darwin, add options to specify how the application appears in the dock
108- if  $darwin ;  then 
109-  GRADLE_OPTS=" $GRADLE_OPTS  \" -Xdock:name=$APP_NAME \"  \" -Xdock:icon=$APP_HOME /media/gradle.icns\" " 
110- fi 
157+ #  Collect all arguments for the java command, stacking in reverse order:
158+ #  * args from the command line
159+ #  * the main class name
160+ #  * -classpath
161+ #  * -D...appname settings
162+ #  * --module-path (only if needed)
163+ #  * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
164+ 165+ #  For Cygwin or MSYS, switch paths to Windows format before running java
166+ if  " $cygwin "   ||  " $msys "   ;  then 
167+  APP_HOME=$(  cygpath --path --mixed " $APP_HOME "   ) 
168+  CLASSPATH=$(  cygpath --path --mixed " $CLASSPATH "   ) 
169+ 170+  JAVACMD=$(  cygpath --unix " $JAVACMD "   ) 
111171
112- #  For Cygwin, switch paths to Windows format before running java
113- if  $cygwin  ;  then 
114-  APP_HOME=` cygpath --path --mixed " $APP_HOME " ` 
115-  CLASSPATH=` cygpath --path --mixed " $CLASSPATH " ` 
116-  JAVACMD=` cygpath --unix " $JAVACMD " ` 
117- 118-  #  We build the pattern for arguments to be converted via cygpath
119-  ROOTDIRSRAW=` find -L / -maxdepth 1 -mindepth 1 -type d 2> /dev/null` 
120-  SEP=" " 
121-  for  dir  in  $ROOTDIRSRAW  ;  do 
122-  ROOTDIRS=" $ROOTDIRS$SEP$dir " 
123-  SEP=" |" 
124-  done 
125-  OURCYGPATTERN=" (^($ROOTDIRS ))" 
126-  #  Add a user-defined pattern to the cygpath arguments
127-  if  [ " $GRADLE_CYGPATTERN "   !=  " "   ] ;  then 
128-  OURCYGPATTERN=" $OURCYGPATTERN |($GRADLE_CYGPATTERN )" 
129-  fi 
130172 #  Now convert the arguments - kludge to limit ourselves to /bin/sh
131-  i=0
132-  for  arg  in  " $@ "   ;  do 
133-  CHECK=` echo " $arg " | egrep -c " $OURCYGPATTERN "   -` 
134-  CHECK2=` echo " $arg " | egrep -c " ^-" `   # ## Determine if an option
135- 136-  if  [ $CHECK  -ne  0 ] &&  [ $CHECK2  -eq  0 ] ;  then  # ## Added a condition
137-  eval  ` echo args$i `  =` cygpath --path --ignore --mixed " $arg " ` 
138-  else 
139-  eval  ` echo args$i `  =" \" $arg \" " 
173+  for  arg do 
174+  if 
175+  case  $arg  in  # (
176+  -* ) false  ;; #  don't mess with options #(
177+  /?* ) t=${arg#/ }  t=/${t%%/* }  #  looks like a POSIX filepath
178+  [ -e  " $t "   ] ;; # (
179+  * ) false  ;;
180+  esac 
181+  then 
182+  arg=$(  cygpath --path --ignore --mixed " $arg "   ) 
140183 fi 
141-  i=$(( i+ 1 )) 
184+  #  Roll the args list around exactly as many times as the number of
185+  #  args, so each arg winds up back in the position where it started, but
186+  #  possibly modified.
187+  # 
188+  #  NB: a `for` loop captures its iteration list before it begins, so
189+  #  changing the positional parameters here affects neither the number of
190+  #  iterations, nor the values presented in `arg`.
191+  shift  #  remove old arg
192+  set  -- " $@ "   " $arg "   #  push replacement arg
142193 done 
143-  case  $i  in 
144-  (0) set  -- ;;
145-  (1) set  -- " $args0 "   ;;
146-  (2) set  -- " $args0 "   " $args1 "   ;;
147-  (3) set  -- " $args0 "   " $args1 "   " $args2 "   ;;
148-  (4) set  -- " $args0 "   " $args1 "   " $args2 "   " $args3 "   ;;
149-  (5) set  -- " $args0 "   " $args1 "   " $args2 "   " $args3 "   " $args4 "   ;;
150-  (6) set  -- " $args0 "   " $args1 "   " $args2 "   " $args3 "   " $args4 "   " $args5 "   ;;
151-  (7) set  -- " $args0 "   " $args1 "   " $args2 "   " $args3 "   " $args4 "   " $args5 "   " $args6 "   ;;
152-  (8) set  -- " $args0 "   " $args1 "   " $args2 "   " $args3 "   " $args4 "   " $args5 "   " $args6 "   " $args7 "   ;;
153-  (9) set  -- " $args0 "   " $args1 "   " $args2 "   " $args3 "   " $args4 "   " $args5 "   " $args6 "   " $args7 "   " $args8 "   ;;
154-  esac 
155194fi 
156195
157- #  Escape application args
158- save  () {
159-  for  i do  printf  %s\\ n " $i "   |  sed " s/'/'\\\\ ''/g;1s/^/'/;\$ s/\$ /' \\\\ /"   ;  done 
160-  echo  "  " 
161- }
162- APP_ARGS=$( save " $@ " ) 
163- 164- #  Collect all arguments for the java command, following the shell quoting and substitution rules
165- eval  set  -- $DEFAULT_JVM_OPTS  $JAVA_OPTS  $GRADLE_OPTS  " \" -Dorg.gradle.appname=$APP_BASE_NAME \" "   -classpath " \" $CLASSPATH \" "   org.gradle.wrapper.GradleWrapperMain " $APP_ARGS " 
166- 167- #  by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
168- if  [ " $( uname) "   =  " Darwin"   ] &&  [ " $HOME "   =  " $PWD "   ];  then 
169-  cd  " $( dirname " 0ドル " ) " 
170- fi 
196+ #  Collect all arguments for the java command;
197+ #  * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
198+ #  shell script including quotes and variable substitutions, so put them in
199+ #  double quotes to make sure that they get re-expanded; and
200+ #  * put everything else in single quotes, so that it's not re-expanded.
201+ 202+ set  -- \
203+  " -Dorg.gradle.appname=$APP_BASE_NAME "   \
204+  -classpath " $CLASSPATH "   \
205+  org.gradle.wrapper.GradleWrapperMain \
206+  " $@ " 
207+ 208+ #  Use "xargs" to parse quoted args.
209+ # 
210+ #  With -n1 it outputs one arg per line, with the quotes and backslashes removed.
211+ # 
212+ #  In Bash we could simply go:
213+ # 
214+ #  readarray ARGS < <( xargs -n1 <<<"$var" ) &&
215+ #  set -- "${ARGS[@]}" "$@"
216+ # 
217+ #  but POSIX shell has neither arrays nor command substitution, so instead we
218+ #  post-process each arg (as a line of input to sed) to backslash-escape any
219+ #  character that might be a shell metacharacter, then use eval to reverse
220+ #  that process (while maintaining the separation between arguments), and wrap
221+ #  the whole thing up as a single "set" statement.
222+ # 
223+ #  This will of course break if any of these variables contains a newline or
224+ #  an unmatched quote.
225+ # 
226+ 227+ eval  " set -- $( 
228+  printf  ' %s\n'   " $DEFAULT_JVM_OPTS  $JAVA_OPTS  $GRADLE_OPTS "   |  
229+  xargs -n1 |  
230+  sed '  s~[^-[:alnum:]+,./:=@_]~\\&~g; '   |  
231+  tr ' \n'   '  '  
232+  )  "   ' "$@"' 
171233
172234exec  " $JAVACMD "   " $@ " 
0 commit comments