Ho una build Android che ho bisogno di personalizzare, la domanda è qui e non nello stack overflow perché il mio problema è stato con bash. Ho scritto una sceneggiatura:
#!/bin/bash -xv
params=$@
if [ "$#" -ge "2" ]; then
params=$1
shift
params="$params --custom-package com.some.package"
while [ "$#" -gt "0" ]; do
temp=$1
echo $1 | grep ' ' > /dev/null
if [ "$?" -eq "0" ]; then
temp=\"$1\"
fi
params="$params $temp"
shift
done
fi
path=$(echo $0|xargs dirname)
echo $params
$path/aapt-orig $params
lo script suppone di prendere i parametri ottenuti, aggiungere il parametro --custom-package com.some.package e mantenere il resto dei params, il primo parametro ($ 1) è l'azione quindi ho bisogno di tenerlo prima.
Il problema è con gli spazi nei nomi delle directory './my android dir /' per esempio. se passo il parametro attraverso: param = "$ param $ 1"; merda; se ho spazi nel nome non funziona perché il nuovo parametro non è sfuggito (con "), se uso il codice sopra ancora non funziona perché per qualche motivo bash ignora il" char e considera ancora lo spazio nel mezzo come parametro separato! ecco l'output della corsa: './aapt action' / Users / bankleumi / some dir / "another_param '
'[' 0 -eq 0 ']'
+ temp='"/Users/bankleumi/some dir/"'
+ params='action --custom-package com.leumi.leumiwallet "/Users/bankleumi/some dir/"'
+ shift
+ '[' 1 -gt 0 ']'
+ temp=another_param
+ echo another_param
+ grep ' '
+ '[' 1 -eq 0 ']'
+ params='action --custom-package com.leumi.leumiwallet "/Users/bankleumi/some dir/" another_param'
+ shift
+ '[' 0 -gt 0 ']'
path=$(echo $0|xargs dirname)
echo $0|xargs dirname
++ echo ./aapt
++ xargs dirname
+ path=.
echo $params
+ echo action --custom-package com.leumi.leumiwallet '"/Users/bankleumi/some' 'dir/"' another_param
action --custom-package com.leumi.leumiwallet "/Users/bankleumi/some dir/" another_param
$path/aapt-orig $params
+ ./aapt-orig action --custom-package com.leumi.leumiwallet '"/Users/bankleumi/some' 'dir/"' another_param
Come puoi vedere alla fine nella stampa di echo bash considera la stringa "/ Users / bankleumi / some dir" come due stringhe anche se ci sono "integrati" nella stringa! come posso fare in modo che bash lasci lo spazio da solo? (Ho provato a giocare con IFS e non ha funzionato neanche ...)
echo $0 | xargs dirname
? Veramente?