Lệnh scp làm việc trong bash không hoạt động trong zsh


14

Lệnh này hoạt động tốt trong 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

nhưng trong zsh nó không thành công, không tìm thấy tập tin nào:

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

Điều gì đang xảy ra?


Tôi đã tự hỏi liệu có ổn không khi đăng bài này ở đây, nhưng tôi đã tìm kiếm zsh và scp và tìm thấy nhiều mục, không có mục nào được đánh dấu là 'tạm dừng', nếu không tôi sẽ không đăng nó ở đây.
K.-Michael Aye

Câu trả lời:


16

Vấn đề là zshđược globbing con đường hẻo lánh. Bạn có thể xác minh điều này bằng cách

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

Để tắt tính năng toàn cầu hóa cho các đường dẫn từ xa scp, nhưng nếu không, hãy để lại toàn cầu (từ đây ) thêm điều này vào .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
Chúc mừng. Đã xác nhận. Tôi có thể tắt nó không?
K.-Michael Aye

1
@ K. - MichaelAye Chỉnh sửa câu trả lời, nhưng có.
Elliott Frisch

Và bản hack đó cũng hoạt động. Cảm ơn rất nhiều! (Đã thêm nó vào .zshrc của tôi)
K.-Michael Aye

2

Nếu bạn sử dụng dấu ngoặc đơn, thì nó hoạt động:

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

Tôi sẽ +1 bạn vì đây là một sửa chữa đơn giản trong việc sử dụng Cygwin. Cảm ơn!
Carlos

sửa chữa đơn giản và dễ dàng. Cảm ơn! không cần móc thêm.
kate
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.