Newsgroup: it.comp.os.linux.iniziare
Titolo: spazio vuoto con $@

$ cat main-test.sh
#!/bin/bash
options="$@"
options+=("-n")
options+=("--exclude "$docsDir"")
echo "${options[@]}"
 
$ ./main-test.sh -x
-x -n --exclude
 
OK adesso però attenzione
 
$ ./main-test.sh
  -n --exclude
 
Perchè prima di -n c'è uno spazio vuoto?
Si potrebbe togliere?


E perche`, nel primo caso, c'e` uno spazio
tra "-x" e "-n"?
 
Non e` lo stessa situazione?
 
Da dove arriva quello spazio tra i vari elementi
della stringa?
 
Forse dovresti rivedere cosa fa "+=" e cosa
significhi ${options[@]} esattamente.
 
bye,
 
-- 
 
piergiorgio

 significhi ${options[@]} esattamente.
 
OK, ho cercato di capire meglio il funzionamento.
Ma in pratica per inserire opzioni (senza spazi inutili qualora non ci 
siano opzioni)?
 
Cioè
 
$ ./test.sh
[nientespazio]-b -c
 
$ ./test.sh -a
-a -b -c
 

 -a -b -c
 
Forse sarebbe meglio tu spiegassi cosa vuoi
raggiungere, come cerchi di farlo e perche`.
 
Io conosco "getopt" o "getopts" per fare il
parsing dei parametri, ma non so se questo
sia quello che vuoi.
 
bye,
 
-- 
 
piergiorgio

 raggiungere, come cerchi di farlo e perche`.
 
$ cat main-test.sh
#!/bin/bash
echo "Opzioni: "$@" -b -c"
 
$ ./main-test.sh -a
Opzioni: -a -b -c
 
$ ./main-test.sh
Opzioni:  -b -c
 
Come vedi, l'ultimo esempio ha il problema del doppio spazio


Si, ma non si capisce quale sia il tuo obiettivo e
perche` uno o due spazi in piu` siano un problema.
 
Cosa vuoi fare?
Perche` non usi "getopt(s)"?
 
bye,
 
-- 
 
piergiorgio

 Perche` non usi "getopt(s)"?
 
$ cat test.sh
#!/bin/bash
cmd="ls "$@" -l"
read -p "Eseguire il comando '$cmd'?" answer
[ "$answer" == "s" ] && $cmd
 
$ ./test.sh
Eseguire il comando 'ls  -l'?s
totale 6144
-rwxrwxrwx 1 root root   24 dic 15 10:20 abc
-rwxrwxrwx 1 root root  157 dic 15 10:20 composer.json
 
Come vedi
 
'ls  -l'
 
c'è uno spazio di troppo.
Alla fine è questione di estetica vabbè, se proprio non c'è soluzione, 
pazienza!!

 pazienza!!
 
Ma soluzione a cosa?
Qual'e` il problema?
 
bye,
 
-- 
 
piergiorgio

 Qual'e` il problema?
 
#!/bin/bash
cmd_preview="rsync "$@" -a --delete /tmp/qualcosa/ /tmp/qualcosaltro/"
# Dato che l'operazione è molto delicata
# (occhio all'opzione --delete),
# prima di procedere viene chiesta la conferma,
# così evitiamo di fare danni
read -p "Sei sicuro di voler eseguire il comando '$cmd_preview'?" answer
[ "$answer" == "s" ] && $cmd_preview
 
Così se lo script viene lanciato per sbaglio, o nel momento sbagliato, o 
per distrazione, si evita che faccia danni.
È un approccio sbagliato?


Quindi il problema è che e non ci sono opzioni, viene fuori lo spazio doppio
 
Sei sicuro di voler eseguire il comando 'rsync[doppio-spazio]-a --delete 
/tmp/qualcosa/ /tmp/qualcosaltro/'?

 È un approccio sbagliato?
 
Non c'e` bisogno di scrivere il comando, basta
dichiarare cosa succedera`.
 
Lo script dovrebbe avere un "case", e per ogni
caso un comando "rsync" con rispettivo "echo"
su cosa fara` e richiesta di conferma.
Ovviamente puo` essere parametrizzato, ma questo
e` un secondo livello.
 
bye,
 
-- 
 
piergiorgio

Il 14/02/2018 21:43, alex ha scritto:

Perche' invece non aggiungi le opzioni "--backup" e
"--backup-dir=<data&ora>" in modo da conservare i file rimossi o 
modificati e che puoi sempre recuperare in seguito?
Ti mette al riparo da qualunque errore, anche da cancellazioni 
involontarie di quello che vuoi salvare.
 
angelo

 involontarie di quello che vuoi salvare.
 
anche questa potrebbe essere una soluzione

Il 14/02/2018 22:13, Piergiorgio Sartor ha scritto:
 > [...]
 
ok, mi sa che dovrò rivedere l'architettura del mio script :)


Secondo me e' LA soluzione!
Questa ti consente di automatizzare e programmare il backup senza 
preoccuparti del resto, potendo ripristinare qualunque situazione 
precedente.
 
angelo

 precedente.
 
grazie