"$@:2"? Perché non "$2"?
On Thu, Aug 29, 2019 at 5:06 PM 'Luigi R. Viggiano' [email protected] [it-torino-java-jug] <[email protected]> wrote: > > > Ho provato con a sostituire $* con $@ e non va. > > $ cat __java > > REQ_VERSION="$1" > > shift > > JVM_PREFIX_PATH="/Library/Java/JavaVirtualMachines" > > JVM_SUFFIX_PATH="/Contents/Home" > > > _latest() { > > local WHERE="$1" > > find "${WHERE}" -maxdepth 1 -type d 2> /dev/null | grep "${@:2}" | > sort -r | head -1 > > } > > > _readlink() { > > if [[ -L $1 ]]; then > > stat -f "%Y" "$1" > > else > > stat -f "%N" "$1" > > fi > > } > > > # environment settings > > JDK_PATH="$(_latest `_readlink $JVM_PREFIX_PATH` $REQ_VERSION)" > > if [[ -n "$JDK_PATH" ]]; then > > export JAVA_HOME="$JDK_PATH$JVM_SUFFIX_PATH" > > export PATH=$JAVA_HOME/bin:$PATH > > export MANPATH=$JAVA_HOME/man:$MANPATH > > else > > echo JDK matching version \"$REQ_VERSION\" cannot be found. >&2 > > exit 1 > > fi > > > unset -f _latest _readlink > > > if [[ -n "$VERBOSE" ]]; then > > echo JAVA_HOME=$JAVA_HOME > > echo > > java -version > > echo > > fi > > > # execute the command line > > if [ -n "${@}" ]; then > > ${@} > > fi > > > $ java8 ls -la > > /Users/work/var/src/dotfiles/bin/__java: line 40: [: ls: binary operator > expected > > > $ cat __java > > REQ_VERSION="$1" > > shift > > JVM_PREFIX_PATH="/Library/Java/JavaVirtualMachines" > > JVM_SUFFIX_PATH="/Contents/Home" > > > _latest() { > > local WHERE="$1" > > find "${WHERE}" -maxdepth 1 -type d 2> /dev/null | grep "${@:2}" | > sort -r | head -1 > > } > > > _readlink() { > > if [[ -L $1 ]]; then > > stat -f "%Y" "$1" > > else > > stat -f "%N" "$1" > > fi > > } > > > # environment settings > > JDK_PATH="$(_latest `_readlink $JVM_PREFIX_PATH` $REQ_VERSION)" > > if [[ -n "$JDK_PATH" ]]; then > > export JAVA_HOME="$JDK_PATH$JVM_SUFFIX_PATH" > > export PATH=$JAVA_HOME/bin:$PATH > > export MANPATH=$JAVA_HOME/man:$MANPATH > > else > > echo JDK matching version \"$REQ_VERSION\" cannot be found. >&2 > > exit 1 > > fi > > > unset -f _latest _readlink > > > if [[ -n "$VERBOSE" ]]; then > > echo JAVA_HOME=$JAVA_HOME > > echo > > java -version > > echo > > fi > > > # execute the command line > > if [ -n "${*}" ]; then > > ${*} > > fi > > > $ java8 ls -la > > total 264 > > drwxr-xr-x 35 lvig0001 admin 1120 Aug 29 17:02 . > > drwxr-xr-x 10 lvig0001 admin 320 Feb 6 2019 .. > > -rw-r--r-- 1 lvig0001 admin 870 Aug 29 17:02 __java > > -rw-r--r-- 1 lvig0001 admin 865 Nov 6 2018 __ssh_server_functions > > -rwxr-xr-x 1 lvig0001 admin 103 Nov 6 2018 airport > > -rwxr-xr-x 1 lvig0001 admin 82 Nov 6 2018 backup-music > > > > > Da notare che nella funzione _latest() ho usato ${@:2}. > > Probabilmente è uno di quei casi dove bisogna usare ${*} > > Adesso non mi ricordo perché è così, ma probabile che ci sono inciampato > già su questa cosa. > > Per cui non è un bug, è una feature ;) > > Ciao > --Luigi > > > > On Thu, Aug 29, 2019 at 4:51 PM Luigi R. Viggiano < > [email protected]> wrote: > >> Effettivamente è un bug. Ma non essendomene mai accorto.... ;) >> >> Ci sono una serie di quirk di bash di cui sono al corrente (tipo la >> differenza tra "[" e "[[") o gli apici singoli e doppi, e anche $* e $@. >> Prendo nota come best practice di usare "$@". >> >> Lo correggo quando arrivo a casa. ;) >> >> Grazie. >> --Luigi >> >> >> >> On Wed, May 8, 2019 at 10:59 PM Paolo Mossino [email protected] >> <[email protected]> [it-torino-java-jug] < >> [email protected]> wrote: >> >>> >>> >>> Concorderei, MA: >>> >>> - stiamo parlando di un dotfiles, quindi mi aspetto sia l'autore a >>> considerare e decidere cosa farci, visto che è teoricamente a suo uso e >>> consumo semi-esclusivo ;-) >>> - è possibile che A) funzioni per via compensazioni altrove (tipo >>> doppio bug che si annullano a vicenda) o B) l'autore faccia leva su >>> questo >>> comportamento per fare magie, quindi risolverlo potrebbe impattare >>> dipendenze esterne di cui non sono a conoscenza >>> >>> Parliamo di Java, ecco un esempio di magie che funzionicchiano >>> sfruttando il fatto che *NON* hai quotato correttamente le variabili (e >>> quindi chiedi alla bash di fare un parsing al volo): >>> >>> OPTS="-Dfoo=bar -Daaa=bbb" >>> java ${OPTS} "$@" >>> >>> >>> La versione corretto richiede di usare un array bash (se la version di >>> Bash lo supporta): >>> >>> declare -a OPTS=( >>> '-DDfoo=bar' >>> '-Daaa=bbb' >>> ) >>> >>> java "${OPTS[@]}" "$@" >>> >>> >>> ..... ma questo non funziona bene se OPTS veniva dall'environment (che >>> AFAICR non supporta gli array, solo stringhe) anziché da un file >>> sourced. >>> >>> Un *buon* esempio di come fare uno startup di un programma Java >>> correttamente l'ho trovato in jetty.sh... good job! ;-) >>> >>> >>> >>> On Wed, May 8, 2019 at 3:38 PM Roberto Franchini [email protected] >>> [it-torino-java-jug] <[email protected]> wrote: >>> >>>> >>>> >>>> >>>> >>>> On Wed, May 8, 2019 at 3:33 PM Paolo Mossino [email protected] >>>> [it-torino-java-jug] <[email protected]> wrote: >>>> >>>>> >>>>> >>>>> [cut] >>>> >>>> >>>> >>>>> L'errore appare nei vari wrapper, tipo >>>>> >>>>> - https://github.com/lviggiano/dotfiles/blob/master/bin/java10#L2 >>>>> - https://github.com/lviggiano/dotfiles/blob/master/bin/__java#L41 >>>>> <https://github..com/lviggiano/dotfiles/blob/master/bin/__java#L41> >>>>> >>>>> >>>>> >>>> PR subito!!!!! >>>> That's the way! >>>> >>>> FRANK >>>> -- >>>> Roberto Franchini >>>> "The impossible is inevitable" >>>> https://github.com/robfrank/ >>>> https://twitter.com/robfrankie >>>> https://www.linkedin..com/in/robfrank >>>> <https://www.linkedin.com/in/robfrank> >>>> >>>> >>> >>> -- >>> Paolo Mossino <[email protected]> >>> >>> > -- Paolo Mossino <[email protected]>
