Problemi nello script con spazi nel nome file


11

Ho uno script che scp è un file dall'host remoto al locale. A volte i nomi dei file contengono spazi. scp non ama gli spazi nei nomi dei suoi file. Per qualche ragione i miei tentativi di gestire gli spazi non hanno portato al percorso scp corretto.

Codice:

PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH Me@10.1.10.33:/Users/Me/Desktop

Risultati in

Cannot find directory: var/root/Documents/MyFile
Cannot find directory: OG-v1.2.3.pkg

Racchiudere PATH tra virgolette "$PATH"dà lo stesso errore.

Anche lo scambio di spazi con spazi di escape non funziona, anche se per quanto posso dire dovrebbe:

ESC_PATH=${PATH/' '/'\ '}

sebbene la stampa del percorso di escape mostri che la modifica ha funzionato:

echo $ESC_PATH
> /var/root/Documents/MyFile\ OG-v1.2.3.pkg

4
Si prega di non utilizzare $PATHper le proprie variabili, perché il terminale ne ha bisogno.
Bernhard,

Risposte:


19

Dovresti citare sia la dichiarazione che l'uso

path="/var/root/Documents/MyFile OG-v1.2.3.pkg"
scp "$path" Me@10.1.10.33:/Users/Me/Desktop

Se non citate la prima, $pathconterrà solo la prima parte. Se non citate la seconda, scptratterà ogni parte separata dallo spazio come un argomento.

(Sono passato $PATHa $pathperché $PATHè un'importante variabile riservata e non devi usarla per scopi generali.)


1
Perfetto! Grazie mille a @Matteo. Si scopre che c'era anche uno spazio prefissato che ci lanciava anche una chiave inglese.
Miles Alden,

1

Stavo provando qualcosa di molto simile con ssh e passando attraverso una riga di comando. per esempio

ssh <somehost> ls -l "$PATH"

Ho scoperto che la semplice definizione di "$ PATH" non ha funzionato, ma ha comunque generato errori. Tuttavia, se ho corso

ssh <somehost> ls -l "\"$PATH"\"

Questo ha funzionato. Il trucco è garantire che un insieme aggiuntivo di "" venga passato al comando ssh dalla shell.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.