[Risolto][Bash] Assegnare variabile con spazi e apostrofi

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
Mr Ferryman
Prode Principiante
Messaggi: 148
Iscrizione: venerdì 23 gennaio 2015, 1:13
Desktop: GNOME
Distribuzione: Ubuntu 14.04 LTS x86_64
Sesso: Maschile

[Risolto][Bash] Assegnare variabile con spazi e apostrofi

Messaggio da Mr Ferryman »

Ciao, dovrei assegnare una variabile col path e nome di un font da installare ma il nome del font contiene spazi e apostrofi e di conseguenza mi da errore nel caricare il file.
Il nome del font da installare per esempio è : Martin Vogel's Symbols.ttf
ma quando assegno come variabile per esempio:
font=" /root/Desktop/myfonts/Martin Vogel's Symbols.ttf " ovviamente mi da l'errore e se metto gli apostrofi ' ' mi da errore perchè la parola Vagel's contiene l'apostrofo.
Come posso assegnare quel file ad una variabile?
Grazie :ciao:
Ultima modifica di Mr Ferryman il sabato 28 febbraio 2015, 18:34, modificato 1 volta in totale.
Tutto ciò che pensiamo rappresenta esattamente quello che siamo.
Solo quando avremo la piena consapevolezza di essere dei privilegiati nel vivere questa vita avremo finalmente rispetto per il prossimo e per la vita stessa ... solo allora ci renderemo conto che sarà troppo tardi.
1001001
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1506
Iscrizione: mercoledì 22 dicembre 2010, 18:09
Desktop: Unity
Distribuzione: Ubuntu 14.04.1 LTS 64bit
Località: Verona

Re: [Bash] Assegnare variabile con spazi e apostrofi

Messaggio da 1001001 »

Ciao! Premesso che usare spazi e caratteri speciali nei nomi è una cosa che andrebbe evitata come la peste, quando dici
Mr Ferryman ha scritto:ma quando assegno come variabile per esempio:
font=" /root/Desktop/myfonts/Martin Vogel's Symbols.ttf " ovviamente mi da l'errore
non vedo dove sia il problema:

Codice: Seleziona tutto

mattia@alien:~$ font="/root/Desktop/myfonts/Martin Vogel's Symbols.ttf"
mattia@alien:~$ echo $font
/root/Desktop/myfonts/Martin Vogel's Symbols.ttf
mattia@alien:~$
Morale: il problema non è nell'assegnamento, ma (suppongo) nell'uso che ne fai dopo.
Che errore ti dà? E con quale comando?
"I find your lack of faith disturbing."
Avatar utente
Mr Ferryman
Prode Principiante
Messaggi: 148
Iscrizione: venerdì 23 gennaio 2015, 1:13
Desktop: GNOME
Distribuzione: Ubuntu 14.04 LTS x86_64
Sesso: Maschile

Re: [Bash] Assegnare variabile con spazi e apostrofi

Messaggio da Mr Ferryman »

Ciao @1001001, grazie intanto per l'intervento
Il comando da eseguire è un semplice cp, in realtà la variabile è composta da più di un font che devono essere copiati in un path assegnato ad un altra variabile.

Codice: Seleziona tutto

#!/bin/bash

MYFONTS="/root/Desktop/PostSetup/FileSetup/myfonts/ConkySymbols.ttf      
/root/Desktop/PostSetup/FileSetup/myfonts/PizzaDude Bullets.ttf
/root/Desktop/PostSetup/FileSetup/myfonts/Weather.ttf
/root/Desktop/PostSetup/FileSetup/myfonts/Poky.ttf
/root/Desktop/PostSetup/FileSetup/myfonts/Martin Vogel's Symbols.ttf
/root/Desktop/PostSetup/FileSetup/myfonts/StyleBats.ttf
/root/Desktop/PostSetup/FileSetup/myfonts/OpenLogos.ttf
/root/Desktop/PostSetup/FileSetup/myfonts/VariShapes Solid.ttf "      

TRUE="/media/Volume/Tools/CANTIERE/grubo"      

cp -r $MYFONTS $TRUE
sleep 5
in questo modo mi restituisce:

Codice: Seleziona tutto

cp: impossibile eseguire stat di "/root/Desktop/PostSetup/FileSetup/myfonts/PizzaDude": No such file or directory
cp: impossibile eseguire stat di "Bullets.ttf": No such file or directory
cp: impossibile eseguire stat di "/root/Desktop/PostSetup/FileSetup/myfonts/Martin": No such file or directory
cp: impossibile eseguire stat di "Vogel's": No such file or directory
cp: impossibile eseguire stat di "Symbols.ttf": No such file or directory
cp: impossibile eseguire stat di "/root/Desktop/PostSetup/FileSetup/myfonts/VariShapes": No such file or directory
cp: impossibile eseguire stat di "Solid.ttf": No such file or directory
dove sbaglio?

[EDIT]
In pratica nonostante l'errore
mi copia solo i fonts che non contengono spazi nel nome mentre quei tre che hanno spazi non li copia
[/EDIT]
Tutto ciò che pensiamo rappresenta esattamente quello che siamo.
Solo quando avremo la piena consapevolezza di essere dei privilegiati nel vivere questa vita avremo finalmente rispetto per il prossimo e per la vita stessa ... solo allora ci renderemo conto che sarà troppo tardi.
1001001
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1506
Iscrizione: mercoledì 22 dicembre 2010, 18:09
Desktop: Unity
Distribuzione: Ubuntu 14.04.1 LTS 64bit
Località: Verona

Re: [Bash] Assegnare variabile con spazi e apostrofi

Messaggio da 1001001 »

Ah, certo, se nella variabile hai più di un file la presenza degli spazi rende tutto più complicato. La cosa più facile è usare find:

Codice: Seleziona tutto

find DIRECTORY_FONTS -type f -print0 | xargs -0 cp -t DIRECTORY_DESTINAZIONE
questo copia tutti i file contenuti in /root/Desktop/PostSetup/FileSetup/myfonts/ . Se ti serve un controllo più fine dimmi quali file vuoi copiare.

Se invece i file che vuoi copiare sono esattamente quelli della variable e sono in qualche modo definiti all'interno dello script dovremo usare un ciclo. Insomma, 'sti file con quale logica sono presi? :D
"I find your lack of faith disturbing."
Avatar utente
Mr Ferryman
Prode Principiante
Messaggi: 148
Iscrizione: venerdì 23 gennaio 2015, 1:13
Desktop: GNOME
Distribuzione: Ubuntu 14.04 LTS x86_64
Sesso: Maschile

Re: [Bash] Assegnare variabile con spazi e apostrofi

Messaggio da Mr Ferryman »

Non so se il comando echo restituisca una cosa diversa dal comando cp in ogni caso facendo come dici te ottengo come errore questo:

Codice: Seleziona tutto

cp: impossibile eseguire stat di "/root/Desktop/PostSetup/FileSetup/myfonts/PizzaDude": No such file or directory
cp: impossibile eseguire stat di "Bullets.ttf": No such file or directory
cp: impossibile eseguire stat di "/root/Desktop/PostSetup/FileSetup/myfonts/Martin": No such file or directory
cp: impossibile eseguire stat di "Vogel's": No such file or directory
cp: impossibile eseguire stat di "Symbols.ttf": No such file or directory
cp: impossibile eseguire stat di "VariShapes": No such file or directory
cp: impossibile eseguire stat di "Solid.ttf": No such file or directory
cp: impossibile eseguire stat di "\\": No such file or directory
e nella cartella di destinazione mi copia i 5 file senza spazi + l'intera cartella con tutti i fonts
Ho spostato i tre fonts con spazi nel nome alla fine per individuarli meglio (sono gli ultimi 3)

Codice: Seleziona tutto

#!/bin/bash

MYFONTS1="/root/Desktop/PostSetup/FileSetup/myfonts/ConkySymbols.ttf
/root/Desktop/PostSetup/FileSetup/myfonts/Weather.ttf
/root/Desktop/PostSetup/FileSetup/myfonts/Poky.ttf
/root/Desktop/PostSetup/FileSetup/myfonts/StyleBats.ttf
/root/Desktop/PostSetup/FileSetup/myfonts/OpenLogos.ttf      
/root/Desktop/PostSetup/FileSetup/myfonts/PizzaDude Bullets.ttf \
/root/Desktop/PostSetup/FileSetup/myfonts/Martin Vogel's Symbols.ttf \
/root/Desktop/PostSetup/FileSetup/myfonts/ VariShapes Solid.ttf \ "

TRUE="/media/Volume/Tools/CANTIERE/grubo"      

cp -r $MYFONTS1 $TRUE
sleep 5
Tutto ciò che pensiamo rappresenta esattamente quello che siamo.
Solo quando avremo la piena consapevolezza di essere dei privilegiati nel vivere questa vita avremo finalmente rispetto per il prossimo e per la vita stessa ... solo allora ci renderemo conto che sarà troppo tardi.
1001001
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1506
Iscrizione: mercoledì 22 dicembre 2010, 18:09
Desktop: Unity
Distribuzione: Ubuntu 14.04.1 LTS 64bit
Località: Verona

Re: [Bash] Assegnare variabile con spazi e apostrofi

Messaggio da 1001001 »

Scusa, avevo scritto una cavolata, ma poi ho modificato subito il messaggio, speravo che non l'avessi visto dato che non eri in linea :)
Prova a vedere quello che ho scritto sopra
"I find your lack of faith disturbing."
Avatar utente
Mr Ferryman
Prode Principiante
Messaggi: 148
Iscrizione: venerdì 23 gennaio 2015, 1:13
Desktop: GNOME
Distribuzione: Ubuntu 14.04 LTS x86_64
Sesso: Maschile

Re: [Bash] Assegnare variabile con spazi e apostrofi

Messaggio da Mr Ferryman »

1001001 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4728059#p4728059][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Ah, certo, se nella variabile hai più di un file la presenza degli spazi rende tutto più complicato. La cosa più facile è usare find:

Codice: Seleziona tutto

find DIRECTORY_FONTS -type f -print0 | xargs -0 cp -t DIRECTORY_DESTINAZIONE
questo copia tutti i file contenuti in /root/Desktop/PostSetup/FileSetup/myfonts/ . Se ti serve un controllo più fine dimmi quali file vuoi copiare.

Se invece i file che vuoi copiare sono esattamente quelli della variable e sono in qualche modo definiti all'interno dello script dovremo usare un ciclo. Insomma, 'sti file con quale logica sono presi? :D
I file sono quegli 8 fonts che devono essere copiati da una cartella ad un altra prima di essere installati , all'interno della cartella dei fonts da copiare c'è solo un file di testo con degli appunti nient'altro.
Ho provato anche ad usare 4 diverse variabili; Variabile1 per l'elenco dei fonts senza spazi nel nome e variabile2, variabile3 e variabile4 una per ogni font che contiene spazi nel nome, MA anche così non funziona.
[edit]
OK allora con "find" riesco a copiare tutti i fonts nella cartella di destinazione e in parte risolvo il problema se non fosse che mi copia anche quel file di testo.txt.
Ora, se c'è una possibilità di escludere quel file dalla lista dei file da copiare, senza crearti troppo ed ulteriore disturbo, sarebbe perfetto altrimenti sposto quel file da un altra parte e metto risolto :D
In ogni caso ti ringrazio tantissimo .. con una sola riga evito variabili e snellisco lo script. :birra: :ciao:
[/edit]
Ultima modifica di Mr Ferryman il sabato 28 febbraio 2015, 18:20, modificato 1 volta in totale.
Tutto ciò che pensiamo rappresenta esattamente quello che siamo.
Solo quando avremo la piena consapevolezza di essere dei privilegiati nel vivere questa vita avremo finalmente rispetto per il prossimo e per la vita stessa ... solo allora ci renderemo conto che sarà troppo tardi.
1001001
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1506
Iscrizione: mercoledì 22 dicembre 2010, 18:09
Desktop: Unity
Distribuzione: Ubuntu 14.04.1 LTS 64bit
Località: Verona

Re: [Bash] Assegnare variabile con spazi e apostrofi

Messaggio da 1001001 »

Ok, porta pazienza, non so cosa avevo in testa. Fai così:

Codice: Seleziona tutto

echo "$FONTS" | while read filename; do cp "$filename" dest; done
Esempio:

Codice: Seleziona tutto

mattia@alien:tmp$ ls -l
totale 4
-rw-rw-r-- 1 mattia mattia    0 feb 28 18:11 ConkySymbols.ttf
drwxrwxr-x 2 mattia mattia 4096 feb 28 18:18 dest
-rw-rw-r-- 1 mattia mattia    0 feb 28 18:11 PizzaDude Bullets.ttf
mattia@alien:tmp$ ls -l dest/
totale 0
mattia@alien:tmp$ FONTS="ConkySymbols.ttf
PizzaDude Bullets.ttf"
mattia@alien:tmp$ echo "$FONTS" | while read filename; do cp "$filename" dest; done
mattia@alien:tmp$ ls -l
totale 4
-rw-rw-r-- 1 mattia mattia    0 feb 28 18:11 ConkySymbols.ttf
drwxrwxr-x 2 mattia mattia 4096 feb 28 18:19 dest
-rw-rw-r-- 1 mattia mattia    0 feb 28 18:11 PizzaDude Bullets.ttf
mattia@alien:tmp$ ls -l dest/
totale 0
-rw-rw-r-- 1 mattia mattia 0 feb 28 18:19 ConkySymbols.ttf
-rw-rw-r-- 1 mattia mattia 0 feb 28 18:19 PizzaDude Bullets.ttf
mattia@alien:tmp$ 
EDIT
visto adesso il tuo edit :D
Se vuoi copiare tutto tranne il file .txt puoi fare

Codice: Seleziona tutto

find DIRECTORY_FONTS -type f ! -name "*.txt" -print0 | xargs -0 cp -t DIRECTORY_DESTINAZIONE
Esempio:

Codice: Seleziona tutto

mattia@alien:tmp$ ls -l
totale 4
-rw-rw-r-- 1 mattia mattia    0 feb 28 18:22 a.txt
-rw-rw-r-- 1 mattia mattia    0 feb 28 18:11 ConkySymbols.ttf
drwxrwxr-x 2 mattia mattia 4096 feb 28 18:21 dest
-rw-rw-r-- 1 mattia mattia    0 feb 28 18:11 PizzaDude Bullets.ttf
mattia@alien:tmp$ ls -l dest/
totale 0
mattia@alien:tmp$ ls -l dest/^C
mattia@alien:tmp$ find . -type f ! -name "*.txt" -print0 | xargs -0 cp -t dest/
mattia@alien:tmp$ ls -l
totale 4
-rw-rw-r-- 1 mattia mattia    0 feb 28 18:22 a.txt
-rw-rw-r-- 1 mattia mattia    0 feb 28 18:11 ConkySymbols.ttf
drwxrwxr-x 2 mattia mattia 4096 feb 28 18:22 dest
-rw-rw-r-- 1 mattia mattia    0 feb 28 18:11 PizzaDude Bullets.ttf
mattia@alien:tmp$ ls -l dest/
totale 0
-rw-rw-r-- 1 mattia mattia 0 feb 28 18:22 ConkySymbols.ttf
-rw-rw-r-- 1 mattia mattia 0 feb 28 18:22 PizzaDude Bullets.ttf
mattia@alien:tmp$ 
Scusami per il casino!! :)
"I find your lack of faith disturbing."
Avatar utente
Mr Ferryman
Prode Principiante
Messaggi: 148
Iscrizione: venerdì 23 gennaio 2015, 1:13
Desktop: GNOME
Distribuzione: Ubuntu 14.04 LTS x86_64
Sesso: Maschile

Re: [Bash] Assegnare variabile con spazi e apostrofi

Messaggio da Mr Ferryman »

Credo che ormai ci siamo solo che mi sono sbagliato su una cosa e cioè sul fatto che quel file di testo non ha estensione.txt e di conseguenza lo copia lo stesso .
è un file che si chiama "Leggimi" ma non ha estensione

[edit]
OK RISOLTO
ho cambiato "*.txt" in "Leggimi" e ora copia tutto tranne il file di testo :D
Ancora grazie 1000 metto risolto :ciao:
[/edit]
Tutto ciò che pensiamo rappresenta esattamente quello che siamo.
Solo quando avremo la piena consapevolezza di essere dei privilegiati nel vivere questa vita avremo finalmente rispetto per il prossimo e per la vita stessa ... solo allora ci renderemo conto che sarà troppo tardi.
1001001
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1506
Iscrizione: mercoledì 22 dicembre 2010, 18:09
Desktop: Unity
Distribuzione: Ubuntu 14.04.1 LTS 64bit
Località: Verona

Re: [Bash] Assegnare variabile con spazi e apostrofi

Messaggio da 1001001 »

Di nulla! :)
Ciao! :ciao:
"I find your lack of faith disturbing."
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2848
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: [Risolto][Bash] Assegnare variabile con spazi e apostrof

Messaggio da rai »

dato che sai a priori l'estensione dei file da copiare potrebbe essere ancora più semplce:

Codice: Seleziona tutto

find DIRECTORY_FONTS -iname "*.ttf" -print0 | xargs -0 cp -t DIRECTORY_DESTINAZIONE
1001001
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1506
Iscrizione: mercoledì 22 dicembre 2010, 18:09
Desktop: Unity
Distribuzione: Ubuntu 14.04.1 LTS 64bit
Località: Verona

Re: [Risolto][Bash] Assegnare variabile con spazi e apostrof

Messaggio da 1001001 »

Giusto! Non lo volevo dare per scontato (anche se nell'esempio è così), ma se i file hanno effettivamente tutti estensione uguale il comando di rai è il più appropriato :)
"I find your lack of faith disturbing."
Avatar utente
Mr Ferryman
Prode Principiante
Messaggi: 148
Iscrizione: venerdì 23 gennaio 2015, 1:13
Desktop: GNOME
Distribuzione: Ubuntu 14.04 LTS x86_64
Sesso: Maschile

Re: [Risolto][Bash] Assegnare variabile con spazi e apostrof

Messaggio da Mr Ferryman »

Ottimo davvero mi tornerà utile sia ora che sicuramente in futuro
Grazie ;) :ciao:
Tutto ciò che pensiamo rappresenta esattamente quello che siamo.
Solo quando avremo la piena consapevolezza di essere dei privilegiati nel vivere questa vita avremo finalmente rispetto per il prossimo e per la vita stessa ... solo allora ci renderemo conto che sarà troppo tardi.
Avatar utente
Mr Ferryman
Prode Principiante
Messaggi: 148
Iscrizione: venerdì 23 gennaio 2015, 1:13
Desktop: GNOME
Distribuzione: Ubuntu 14.04 LTS x86_64
Sesso: Maschile

Re: [Risolto][Bash] Assegnare variabile con spazi e apostrof

Messaggio da Mr Ferryman »

rai [url=http://forum.ubuntu-it.org/viewtopic.php?p=4728102#p4728102][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:dato che sai a priori l'estensione dei file da copiare potrebbe essere ancora più semplce:

Codice: Seleziona tutto

find DIRECTORY_FONTS -iname "*.ttf" -print0 | xargs -0 cp -t DIRECTORY_DESTINAZIONE
Provando ora il tuo comando mi restituisce questo errore:

Codice: Seleziona tutto

cp: manca il file operando
Usare «cp --help» per ulteriori informazioni.
:o :sisi:

[edit]
come non detto scusami ho fatto io una cappella ... avevo dimenticato di togliere una lettera dal testo scritto in precedenza tra le "" :lol:
[/edit]
Tutto ciò che pensiamo rappresenta esattamente quello che siamo.
Solo quando avremo la piena consapevolezza di essere dei privilegiati nel vivere questa vita avremo finalmente rispetto per il prossimo e per la vita stessa ... solo allora ci renderemo conto che sarà troppo tardi.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 14 ospiti