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]
> [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
>>>>
>>>>
>>>>
>>> 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
>>>
>>>
>>
>> --
>> Paolo Mossino <[email protected]>
>>
>>
>>
>