bash में काम करने वाला scp कमांड zsh में काम नहीं करता है


15

यह आदेश बैश में ठीक काम करता है:

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 की खोज की और कई प्रविष्टियाँ पाईं, जिनमें से कोई भी 'होल्ड पर' के रूप में चिह्नित नहीं है, अन्यथा मैंने इसे यहाँ पोस्ट नहीं किया होता।
के-माइकल ऐ

जवाबों:


16

समस्या यह है कि है zshहै ग्लोबिंग दूरदराज के पथ। आप इससे सत्यापित कर सकते हैं

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

स्कॉप दूरस्थ रास्तों के लिए ग्लोबिंग को बंद करने के लिए, लेकिन अन्यथा ग्लोबिंग को उसी से छोड़ें ( यहाँ से ) इसे अपने में जोड़ें .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
चीयर्स। की पुष्टि की। क्या मैं इसे बंद कर सकता हूं?
के।-माइकल ऐ

1
@ के।-माइकलए एडिटेड उत्तर, लेकिन हाँ।
इलियट फ्रिस्क

और वह हैक भी काम करता है। बहुत धन्यवाद! (इसे मेरे .zshrc में जोड़ा गया)
-माइकल ऐ

4

यदि आप एकल उद्धरण का उपयोग करते हैं, तो यह काम करता है:

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

मैं आपको +1 करता हूं क्योंकि यह सिग्विन का उपयोग करने में एक साधारण फिक्स था। धन्यवाद!
कार्लोस

सरल और आसान तय। धन्यवाद! आगे हुक की कोई जरूरत नहीं।
केट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.