Zsh সহ কমান্ডগুলিতে ওয়াইল্ডকার্ড ব্যবহার করা


39

যেমন rsyncএবং এর scpসাথে কমান্ড ব্যবহার করে ZSHআমি সমস্যায় পড়েছি। আমাকে সমস্ত মিলে যাওয়া ফাইল দেওয়ার (স্বাভাবিক) আচরণের পরিবর্তে এটি চলবে না এবং ফিরে আসে:

  ~  rsync -azP user@server:~/* ~/
zsh: no matches found: user@server:~/*

আমি এটা কিভাবে ঠিক করবো?

আমার .zshrc

ZSH=$HOME/.oh-my-zsh
ZSH_THEME="robbyrussell"
plugins=(git brew)
source $ZSH/oh-my-zsh.sh
export PATH=$PATH:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/local/sbin

উত্তর:


50

এটি জেডএসএইচ কীভাবে ফাইলের নাম উত্পাদন করতে গ্লোববিং অক্ষর পরিচালনা করে তা সম্পর্কিত। ডিফল্টরূপে, জেডএসএইচ কোনও ফাইলের নাম উত্পন্ন করে এবং কোনও মিল না পাওয়ালে কমান্ডটি কার্যকর করার আগে একটি ত্রুটি নিক্ষেপ করবে।

এই আচরণকে বাইপাস করার অনেকগুলি উপায় রয়েছে, সেগুলির কয়েকটি এখানে:

  • দ্রুততমটি হ'ল বিশ্বব্যাপী চরিত্রগুলি উদ্ধৃতি সহ বন্ধ করা।
$ rsync -azP "user@server:~/*" ~/
  • স্থায়ী পরিবর্তনের জন্য, আপনাকে আপনার .zshrcফাইলে নিম্নলিখিতগুলি যুক্ত করতে হবে:
unsetopt nomatch

এটি কোনও মিল খুঁজে পাওয়া যায় না যখন ZSH একটি ত্রুটি মুদ্রণ করতে প্রতিরোধ করবে।

  • আর একটি সম্ভাবনা হ'ল noglobকমান্ড সংশোধক ব্যবহার করে একটি নির্দিষ্ট কমান্ডের জন্য গ্লোব্বিং নিষ্ক্রিয় করা । .zshrcউদাহরণস্বরূপ একটি উপকরণ সেট করে :
alias scp='noglob scp'

ধন্যবাদ! এর সাথে কখনই করতে হয়নি bash
মরগান

@ মরগান এটি অদ্ভুত, আসলে। উদ্ধৃতিগুলি না থাকলে বাশের টিলডে দেখার আগে তার প্রসারিত হওয়া উচিত rsync। এটি কি এমন হতে পারে যে আপনি উভয় সার্ভারে হোম ডিরেক্টরিতে কেবল একই পথটি ব্যবহার করছেন?
slhck

@ স্লহ্যাক না, তিনি ঠিক বলেছেন zsh এর ওয়াইল্ডকার্ড কনফিগার করার জন্য আরও কিছু বিকল্প রয়েছে যাতে zshrc এ এই আচরণটি পরিবর্তন করা যায়।
ack

1
@ sa125 আমি আমার উত্তর সম্পাদনা করেছি।
Spack

1
@ এসএলএইচএইচকি: bashকেবল একটি টিলড প্রসারিত যখন এটি কোনও শব্দের শুরু হয় , বা ভেরিয়েবল অ্যাসাইনমেন্টের প্রথম অক্ষরটি একটি :বা প্রথমে =হয়। অন্যথায়, এটি আক্ষরিকভাবে চিকিত্সা করা হয়।
চিপনার

8

আমি বেশ কয়েক মাস ধরে জ্রিপেটো ব্যবহার করছি এবং এই সমস্যাটিও অভিজ্ঞতা পেয়েছি। আপনি যদি কোনও পরিবর্তন করতে না চান তবে আমি একটি ঝরঝরে এবং দরকারী সমাধান পেয়েছি: কেবলমাত্র কমান্ডটিতে ব্যাকস্ল্যাশ প্রিপেন্ড করুন।

~/p/b/a/files ❯❯❯ scp *.* myserver@host:~/
*.*: No such file or directory

~/p/b/a/files ❯❯❯ \scp *.* myserver@host:~/
jquery.min.js                              100%   93KB  92.6KB/s   00:00
json2.min.js                               100%   3377   3.3KB/s   00:00

আশা করি এটা কাজে লাগবে!


দুর্দান্ত সমাধান !!
ইয়র্ক

নিখুঁত, এটি ওএসএক্সে আমার পক্ষে দুর্দান্ত কাজ করেছে!
এসমাইলস

অসাধারণ!! তবে কোন কারণে কেন / এটি কাজ করে?
কান্নান রামমূর্তি

3

ইউআরএলগুলিকে ম্যানুয়ালি উদ্ধৃতি না দিয়ে এটি আপনার সমস্যার সমাধান করে

autoload -U url-quote-magic  
zle -N self-insert url-quote-magic

# sort it out for SCP
some_remote_commands=(scp rsync)
zstyle -e :urlglobber url-other-schema \
  '[[ $some_remote_commands[(i)$words[1]] -le ${#some_remote_commands} ]] && reply=("*") || reply=(http https ftp)'

এবং এই .zshrc যায়?
মরগান

হ্যাঁ, এটি আপনার zsh কনফিগারেশনের মধ্যে যায়। এফডব্লিউআইডাব্লু, কেবল একটি নতুন শেল শুরু করুন ( zsh -fএকটি প্রচলিত শেল কনফার জন্য), আপনার শেলের কমান্ডগুলি অনুলিপি করুন এবং আটকান এবং আপনার rsyncআদেশটি টাইপ করুন (বা পেস্ট করুন) । আপনি কাজের সময় যাদুটি দেখতে পাবেন ;-) (ইউআরএল-এ বিশেষ অক্ষরগুলি স্বয়ংক্রিয়ভাবে উদ্ধৃত হয়ে যাবে)
ফ্রান্সিসকো

আপনার আমার উত্তরটি গ্রহণ করা উচিত :- পি পুরো কমান্ডের জন্য গ্লোবিং উদ্ধৃত করা বা বন্ধ করার চেয়ে এটি অনেক ভাল।
ফ্রান্সিসকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.