在bash中工作的scp命令在zsh中不起作用


14

此命令在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

但是在zsh中失败,找不到文件:

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

怎么了?


我想知道是否可以在此处发布此消息,但是我搜索了zsh和scp并发现了很多条目,这些条目都没有标记为“保留”,否则我不会在此处发布。
K.-Michael Aye 2013年

Answers:


16

问题是zsh正在遍历远程路径。您可以通过以下方式进行验证

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

要关闭scp远程路径的通行功能,否则请保持通行状态(从此处开始)添加到您的.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
干杯。已确认。我可以关闭它吗?
K.-Michael Aye 2013年

1
@ K.-MichaelAye编辑答案,但可以。
Elliott Frisch 2013年

而且这种破解也有效。太谢谢了!(将其添加到我的.zshrc中)
K.-Michael Aye 2013年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.