J'ai un script qui scp est un fichier de l'hôte distant au local. Parfois, les noms de fichiers contiennent des espaces. scp n'aime pas les espaces dans ses noms de fichiers. Pour une raison quelconque, mes tentatives de gestion des espaces n'ont pas abouti au chemin scp correct.
Code:
PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH Me@10.1.10.33:/Users/Me/Desktop
Résulte en
Cannot find directory: var/root/Documents/MyFile
Cannot find directory: OG-v1.2.3.pkg
Mettre PATH entre guillemets "$PATH"
donne la même erreur.
L'échange des espaces contre des espaces échappés ne fonctionne pas non plus, bien que pour autant que je sache, cela devrait:
ESC_PATH=${PATH/' '/'\ '}
bien que l'impression du chemin d'échappement montre que la modification a fonctionné:
echo $ESC_PATH
> /var/root/Documents/MyFile\ OG-v1.2.3.pkg
$PATH
pour vos propres variables, car votre terminal en a besoin.Réponses:
Vous devez citer à la fois la déclaration et l'utilisation
Si vous ne citez pas la première,
$path
ne contiendra que la première partie. Si vous ne citez pas la seconde,scp
traitera chaque partie séparée par des espaces comme un argument.(J'ai changé
$PATH
en$path
car$PATH
est une variable réservée importante et vous ne devez pas l'utiliser à des fins générales.)la source
J'essayais quelque chose de très similaire avec ssh et je passais une ligne de commande à travers. par exemple
J'ai trouvé que la simple définition de "$ PATH" ne faisait pas l'affaire - cela a quand même généré des erreurs. Mais si je courais
Cela a fonctionné. L'astuce consiste à s'assurer qu'un ensemble supplémentaire de "" est transmis à la commande ssh à partir du shell.
la source