la commande scp fonctionnant dans bash ne fonctionne pas dans zsh


14

Cette commande fonctionne très bien dans bash:

bash-3.2$ scp luna4:/u/paige/maye/src/diviner/notebooks/plots/hk_* .
hk_az.png                                                   100%  126KB 126.0KB/s   00:00
hk_baffle.png                                               100%  166KB 166.3KB/s   00:01
hk_bb.png                                                   100%  144KB 143.8KB/s   00:00
hk_el.png                                                   100%  115KB 115.3KB/s   00:00
hk_fpa.png                                                  100%  123KB 123.2KB/s   00:00
hk_fpb.png                                                  100%  126KB 125.7KB/s   00:00
hk_hybrid.png                                               100%   99KB  98.7KB/s   00:00
hk_oba.png                                                  100%  140KB 139.7KB/s   00:00
hk_solar.png                                                100%  206KB 205.6KB/s   00:00
hk_temp.png                                                 100%   62KB  61.8KB/s   00:00
hk_yoke.png                                                 100%  122KB 121.7KB/s   00:00
bash-3.2$ exit

mais en zsh ça échoue, aucun fichier n'est trouvé:

$ scp luna4:/u/paige/maye/src/diviner/notebooks/plots/hk_* .
zsh: no matches found: luna4:/u/paige/maye/src/diviner/notebooks/plots/hk_*

Qu'est-ce qui ne va pas?


Je me demandais si c'était correct pour cela de poster ici, mais j'ai recherché zsh et scp et trouvé de nombreuses entrées, dont aucune marquée comme `` en attente '', sinon je ne l'aurais pas postée ici.
K.-Michael Aye

Réponses:


16

Le problème est que zshest englobement le chemin d' accès distant. Vous pouvez le vérifier en

scp luna4:"/u/paige/maye/src/diviner/notebooks/plots/hk_*" .

Pour désactiver la globalisation pour les chemins distants scp, mais sinon laissez la globalisation identique (à partir d' ici ) ajoutez ceci à votre .zshrc-

# Disable globbing on the remote path.
alias scp='noglob scp_wrap'
function scp_wrap {
  local -a args
  local i
  for i in "$@"; do case $i in
    (*:*) args+=($i) ;;
    (*) args+=(${~i}) ;;
  esac; done
  command scp "${(@)args}"
}

1
À votre santé. Confirmé. Puis-je désactiver cela?
K.-Michael Aye

1
@ K.-MichaelAye Réponse éditée, mais oui.
Elliott Frisch

Et ce hack fonctionne également. Grand merci! (Ajouté à mon .zshrc)
K.-Michael Aye

3

Si vous utilisez des guillemets simples, cela fonctionne:

scp 'remote.host.com:files*' .

Je vous attribuerai +1 car il s'agissait d'une solution simple pour utiliser Cygwin. Merci!
Carlos

solution simple et facile. Merci! pas besoin de crochet supplémentaire.
kate
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.