Question

J'ai un script bash qui génère une commande SCP pour exécuter. Les parties pertinentes du code ressemblent à ceci:

echo $COPY_CMD
$COPY_CMD

Ma sortie ressemble à ceci:

rascher@localhost:~/Desktop/video_final$ ./xfervids.sh 
scp "/media/My Book/PhotosVideos/Videos/18May2008Download/SD_VIDEO/PRG001/MOV056.MOD" rascher@192.168.1.101:./video_working/
rascher@192.168.1.101's password: 
"/media/My: No such file or directory
Book/PhotosVideos/Videos/18May2008Download/SD_VIDEO/PRG001/MOV056.MOD": No such file or directory

Cependant, quand je prends la ligne 2 de ma sortie. scp "/media/..., copiez et collez-le dans le terminal, il fonctionne

Qu'est-ce que je fais mal? J'ai essayé échapper l'espace dans « My Book » ("My\ Book"), mettre deux caractères \ plutôt que l'un (de "My\\ Book") mais je ne peux pas obtenir ce à se comporter de manière cohérente. Aide?

Était-ce utile?

La solution

Vous devez être atrocement prudent quand il y a des espaces dans les noms de chemin.

Dans le contexte, vous avez probablement besoin:

eval $COPY_CMD

Vous n'avez pas besoin des guillemets autour de la variable cette fois-ci.

Autres conseils

Vous devriez lire cette discussion comment et pourquoi pour éviter de mettre les commandes dans les variables et < a href = "http://mywiki.wooledge.org/BashFAQ/048" rel = "nofollow noreferrer"> cette discussion des conséquences sur la sécurité de eval.

L'une des raisons que vous pouvez utiliser des variables de cette façon est d'ouvrir une session ou afficher les actions prises par un script. Des problèmes se produisent d'être en mesure de citer correctement ou échapper à des espaces, etc., que vous avez découvert. Une façon de faire ce que vous voudrez peut-être est d'utiliser set -x et set +x pour transformer ce type de sortie et descendre à différents points dans votre script.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top