Pagina 1 di 1

[Android] Shell script su Android [RISOLTO]

Inviato: gio ago 15, 2013 9:26
da Burroughs
Buon Ferragosto a tutti!

Vi sottopongo un problema apparentemente banale ma di cui non son riuscito a venire a capo finora.
Ho utilizzato per anni un tablet, il Samsung Galaxy Tab 10.1, rootato, con BusyBox Pro e ICS come versione di Android, che ha svolto con onore anche la funzione di file server, al fine di consentire, grazie a rsync, backup incrementali dai vari PC che ho a disposizione in casa.
Viste le scadenti prestazioni del tablet in oggetto, qualche settimana fa son passato al Samsung Galaxy Note 10.1: anche in questo caso ho rootato il dispositivo ed installato una rom, con l'unica differenza che questa ha Jelly Bean al posto di Ice Cream Sandwich.
Bene, alcuni script di quelli che ho impiegato con soddisfazione per anni sul precedente tablet, adesso non vanno più.
Ve ne porto a mo' di esempio uno:

Codice: Seleziona tutto

#!/system/bin/sh
# Script di cleaning di myskytv

PREFIX="/mnt/extSdCard/andy/freeguide/day-"
DATE=$(date "+${PREFIX}%Y-%m-%d")

# Mi assicuro che esista almeno un file con la data di oggi
FAKE_FILE=""
  if ! ls ${DATE}* >& /dev/null
  then
        # Non esiste, ne creo uno fasullo
        FAKE_FILE=$(mktemp ${DATE}.XXXXXX)
  fi

  for file in ${PREFIX}*
  do
        if [[ $file != ${DATE}* ]]
        then
       rm $file
        else
       break
        fi
    done

# Elimino l'eventuale file fasullo che ho creato
[[ $FAKE_FILE != "" ]] && rm -f $FAKE_FILE

L'errore che ottengo quando lo eseguo è il seguente:

Codice: Seleziona tutto

/system/bin/clean_freeguide: line 3: $' \r': command not found
/system/bin/clean_freeguide: line 6: $' \r': command not found
/system/bin/clean_freeguide: line 16: syntax error near unexpected token  `$' do\r''
/system/bin/clean_freeguide: line 16: `   do

Qualcuno di voi sa come procedere?
Grazie,

Burroughs.

Re: [Android] Shell script su Android

Inviato: gio ago 15, 2013 10:33
da percoco2000
probabilmente hai qualche carattere "nascosto" che inganna il parser della shell .... alla linea 3 ad esempio lui vede un \r (che suppongo sia un "vai a capo") . Mi ricorda tanto gli errori che si avevano passando un file testo da linux a windows o viceversa.

Re: [Android] Shell script su Android

Inviato: gio ago 15, 2013 10:40
da Burroughs
percoco2000 ha scritto:probabilmente hai qualche carattere "nascosto" che inganna il parser della shell .... alla linea 3 ad esempio lui vede un \r (che suppongo sia un "vai a capo") . Mi ricorda tanto gli errori che si avevano passando un file testo da linux a windows o viceversa.

Sì, le righe 3 e 6 sono vuote, mentre l'errore un po' più in giù è relativo ad un do che il parser non riesce ad interpretare.
Come mi consigli di formattare e/o impostare il testo?

Burroughs.

Re: [Android] Shell script su Android

Inviato: gio ago 15, 2013 21:15
da percoco2000
mmm non saprei . Prova a cambiare editor...

Re: [Android] Shell script su Android

Inviato: gio ago 15, 2013 23:20
da targzeta
Nel tuo script c'è qualche '\r\n' anziché il songolo '\n' usato da Unix.

Puoi provare con 'fromdos':

Codice: Seleziona tutto

fromdos < file > file_linux
a questo punto 'file_linux' dovrebbe andare bene.

Emanuele

Re: [Android] Shell script su Android

Inviato: ven ago 16, 2013 19:00
da Burroughs
targzeta ha scritto:Nel tuo script c'è qualche '\r\n' anziché il songolo '\n' usato da Unix.

Puoi provare con 'fromdos':

Codice: Seleziona tutto

fromdos < file > file_linux
a questo punto 'file_linux' dovrebbe andare bene.

Emanuele

Grazie, Emanuele, ma il comando fromdos la shell non me lo riconosce; ho provato anche con l'implementazione della bash che ho appena tirato su, stessa cosa.
Diciamo che quando, con il mio script launcher, eseguo degli script molto semplici (una sola riga o giù di lì), non ci son problemi, ma appena gliene sottopongo qualcuno più complicato, mi dà errori di sintassi anche se sposto tutto su una sola riga, questo per evitare fraintendimenti dovuti all'andare a capo.
Quello che mi fa arrabbiare è che, con gli stessi software e gli stessi identici script, sul mio vecchio, fetentissimo tablet, con ICS invece che Jelly Bean, non c'era nessun tipo di problema...

Burroughs.

Re: [Android] Shell script su Android

Inviato: ven ago 16, 2013 19:38
da ZeroUno

Codice: Seleziona tutto

cat file|sed 's/^M$//' >file_linux

in cui ^M non sono i caratteri ^ e M ma è un solo carattere che si ottiene tenendo premuto ctrl e premendo in sequenza 'v' e 'm'
prova anche

Codice: Seleziona tutto

cat file|sed 's/.$//' >file_linux

fa la stessa cosa di quello sopra, ma potrebbe fallire in molti casi.

Rinnovo anche io l'invito a cambiare editor.

Re: [Android] Shell script su Android

Inviato: ven ago 16, 2013 21:45
da hashbang
Anche tr dovrebbe andare bene per convertire un fine riga di Windows in uno di tipo Unix.

Codice: Seleziona tutto

$ tr -d '\15\32' < pippo.txt > pippo_unix.txt

Re: [Android] Shell script su Android [RISOLTO]

Inviato: ven ago 16, 2013 22:47
da Burroughs
Ho risolto seguendo le indicazioni di hashbang.
Ragazzi, non so come ringraziarvi perché mi avete consentito di risolvere un problema che mi portavo appresso da una decina di giorni.
Immaginate che su xda-developers, che è il punto di riferimento per chi sviluppa rom alternative e quant'altro su Android, non mi hanno c...ato nemmeno di striscio.
Ancora una volta, onore alla splendida community di Slacky.eu!

Burroughs.

Re: [Android] Shell script su Android

Inviato: ven ago 16, 2013 23:14
da targzeta
hashbang ha scritto:Anche tr dovrebbe andare bene per convertire un fine riga di Windows in uno di tipo Unix.

Codice: Seleziona tutto

$ tr -d '\15\32' < pippo.txt > pippo_unix.txt

Ma perché elimini anche il carattere '\32'? Dovrebbe bastare solo il carriage return (\15), no?

Comunque, dal man di tr, anche:

Codice: Seleziona tutto

tr -d '\r' < pippo.txt > pippo_unix.txt
dovrebbe andar bene.

Emanuele

Re: [Android] Shell script su Android

Inviato: ven ago 16, 2013 23:39
da hashbang
targzeta ha scritto:Ma perché elimini anche il carattere '\32'? Dovrebbe bastare solo il carriage return (\15), no?
Sì Emanuele, in effetti hai ragione. Si può anche lasciare il solo \15.

A suo tempo, ebbi il suo stesso problema con uno script shell scritto al volo su Windows e trovai quella soluzione, ma, come hai detto tu, può essere utilizzato con il solo Carriage Return.