কেন এই ffmpeg কমান্ড ব্যাশে কাজ করে এবং zsh নয়?


17

আজ আমি কাজ থেকে ঘরে ফিরে এসেছি (উবুন্টু বাক্সে বাশ রান করুন) এবং আমার প্রিয় আরআরএসের সাথে স্থানীয় আর্চ বাক্সে কিছু কোড চালানোর চেষ্টা করেছি এবং কমান্ডগুলি ব্যর্থ হচ্ছে?

কমান্ডটি ব্যক্তিগত তথ্য সহ নীচে রয়েছে এবং আইপি স্পষ্টতই পরিবর্তিত হয়েছে

ffmpeg -i rtsp://user:pass@my.webserver.org:5554/my-media/media.amp?videocodec=h264  -threads 3 -vcodec copy -f segment -segment_time 2 outfiles/cam_out%04d.mp4

এটি ব্যাশে নিখুঁতভাবে চলে তবে আমি যখন এটি zsh এ চালাই তখন ত্রুটিটি পাই

zsh: no matches found: rtsp://user:pass@my.webserver.org:5554/my-media/media.amp?videocodec=h264

আমার প্রিয় zsh আমাকে বিশ্বাসঘাতকতা করেছে কেন?


7
একক উদ্ধৃতিতে আরটিএসপি লিঙ্ক স্থাপন করার চেষ্টা করুন।
জিম্মিজ

1
তুমি আমার নায়ক :) আমি জানতাম zsh আমাকে হতাশ করবে না।
জন অ্যালার্ড

1
পরে চেষ্টা করুন mkdir -p 'rtsp://user:pass@my.webserver.org:5554/my-media/media.amp-videocodec=h264'এবং তারপরে বাশ এবং zsh উভয়ই আপনাকে ব্যর্থ করবে। কমপক্ষে zsh আপনাকে এখানে আপনার ভুল দেখায়।
স্টাফেন চেজেলাস

@ কুওগলম, আমি বোঝাতে চাইছি যে যখন কোনও ফাইলের সাথে প্যাটার্নের মিল রয়েছে তখন zsh এবং বাশ উভয়ই "ব্যর্থ" হবেন যাতে বিশ্বটি প্রসারিত হবে। zsh এর আচরণটি এতে সানির, যখন কোনও মিল নেই, এটি আপনাকে আপনার ভুল বুঝতে পারে।
স্টাফেন চেজেলাস

উত্তর:


43

স্ট্রিংয়ে:

rtsp://user:pass@my.webserver.org:5554/my-media/media.amp?videocodec=h264

আপনার কাছে ?সেই স্ট্রিং রয়েছে তাই শেলটি স্ট্রিংয়ের সাথে প্যাটার্ন মেলানো নিয়ম ব্যবহার করে পথের নাম প্রসারিত করবে ।

ইন bash, যদি failglobবিকল্পগুলি সেট না করা থাকে, যা ডিফল্ট হয়, তবে ব্যর্থ প্যাটার্নটি যেমন রয়েছে তেমন ছেড়ে দেওয়া হবে:

$ echo does-not-exist?
does-not-exist?

যদিও zshকোন প্যাটার্ন ম্যাচ ত্রুটি রিপোর্ট হবে nomatchবিকল্প সেট, যা ডিফল্টভাবে হল:

$ echo does-not-exist?
zsh: no matches found: does-not-exist?

আপনি zshত্রুটি দমন করতে পারেন এবং প্যাটার্নটি মুদ্রণ করতে পারেন :

$ setopt nonomatch
$ echo does-not-exist?
does-not-exist?

আপনি করতে পারেন bashমত আচরণ zshসঙ্গেnomatch চালু করে বিকল্প সেট এরfailglob :

$ shopt -s failglob
$ echo does-not-exist?
bash: no match: does-not-exist?

আরও সাধারণভাবে, আপনি শেল ফাইলের নাম উত্পাদন নিষ্ক্রিয় করতে পারেন:

$ set -f
$ : "The command"
$ set +f

(বা set -o noglob, set +o noglob)

বা শেল ট্রিট করতে শেল উদ্ধৃতি পদ্ধতিগুলির একটি ব্যবহার করে? এবং অন্যান্য প্যাটার্নের সাথে বিশেষ অক্ষরের সাথে মিল রেখে অন্য


zshnoglobঅন্তর্নির্মিতটি প্রদান করুন , যা নিম্নলিখিত সাধারণ কমান্ডের জন্য কোনও কথায় ফাইলের নাম তৈরি করতে অক্ষম করে:

$ noglob echo *
*

ওহ বাহ যে একরকম বিব্রতকর ঘটনাটি মিস করেছেন, সুন্দর উত্তরের জন্য ধন্যবাদ।
জন অ্যালার্ড

তবে এখন এটি আমাকে প্রশ্ন করে: কেউ কীভাবে এটি ঠিক করবেন? উদ্ধৃতি ব্যবহার করে? অন্যকিছু? অতি-জটিল বিড়াল + সাবহেলস? আপনি যদি নিজের উত্তরে এটি যুক্ত করেন তবে এটিকে কিছুটা সাধারণ এবং এখনও সম্পূর্ণ এবং সঠিক হিসাবে তৈরি করা ভাল।
ইসমাইল মিগুয়েল

এখন এটি একটি দুর্দান্ত উত্তর! আমি সেই অনুযায়ী উন্নতি করেছি। উত্তরটি সত্যিই শেষ বিট অভাব ছিল। এটি কী হয়েছে তা ঠিক করেছে তবে ঠিক হয়নি। ধন্যবাদ.
ইসমাইল মিগুয়েল

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