(6 risposte)
Chiuso 6 anni fa.
Sto cercando di sfuggire allo spazio char per un percorso in Bash, ma non funziona né l'utilizzo di una barra rovesciata né di virgolette.
Script .sh:
ROOT="/home/hogar/Documents/files/"
FILE=${ROOT}"bdd.encrypted"
DESTINATION="/home/hogar/Ubuntu\ One/folder"
mv ${FILE} ${DESTINATION}
Dopo aver eseguito lo script (./file
) questo è il risultato:
mv: target 'One/folder' is not a directory
Perché il mv
comando divide la stringa e come posso impedire che ciò accada?
Risposta accettata:
Stai espandendo la variabile DESTINATION, se hai fatto echo
questo è ciò che otterresti:
echo ${DESTINATION}
/home/hogar/Ubuntu\ One/folder
Ma mv
non lo capisce:
mv ${FILE} ${DESTINATION}
mv: cannot move '/home/hogar/Documents/files/bdd.encrypted' to '/home/hogar/Ubuntu\\ One/folder': No such file or directory
(per qualche motivo il mio mv è più dettagliato)
Per evitare ciò dovresti invece usare le virgolette:
mv "${FILE}" "${DESTINATION}"
Se non hai bisogno di espansione (dato che la stai già espandendo in precedenza), usa semplicemente "$..."
dovrebbe essere sufficiente:
mv "$FILE" "$DESTINATION"