Problemi con ssh e scp con nomi file contenenti spazi

From RVM Wiki
Revision as of 16:22, 3 May 2006 by Gabriele.vivinetto (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Se si hanno problemi ad eseguire comandi remoti con ssh o a copiare file con nomi contenenti spazi, ricordarsi che occorre fare un double escape dei nomi.

Ad esempio se si ha una directory contente il file "test file.mp3" e si cerca di eseguire un comando tipo

#!/bin/bash
NOME=$(/bin/ls *.mp3)
echo Nome=""$NOME""
scp $NOME localhost:/tmp/$NOME
ssh localhost "mkdir /tmp/$NOME-dir"

si ottiene l'errore:

Nome=test file.mp3
cp: cannot stat `test': No such file or directory
cp: cannot stat `file.mp3': No such file or directory
file.mp3: No such file or directory

Questo perchè non viene 'escapata' la variabile. Bisogna invece mettere tra double quotes il nome della variabile:

#!/bin/bash
#set -x
rm -rf /tmp/test*
NOME=$(/bin/ls *.mp3)
echo Nome=""$NOME""
#test file.mp3
ssh localhost mkdir /tmp/\""$NOME\""-dir
# Notare che la variabile contenente spazi viene quoata
# DUE volte se è riferita alla parte remota
scp "$NOME" localhost:/tmp/\""$NOME\""-dir
# Notare che la variabile viene quotata
# UNA volta se specificata in locale
# DUE volte se viene specificata in remoto