কোন ফাইল বর্ণনাকারী (/ dev / fd / ##) প্রক্রিয়া প্রতিস্থাপনে ব্যবহৃত হয়?


1

আমার একটি প্রোগ্রাম রয়েছে যা 2 ইনপুট নেয়:

my_program --input1 {videoFile1} --input2 {videoFile2}

আমি প্রক্রিয়া প্রতিস্থাপনের মাধ্যমে আমার ইনপুটগুলি পুনঃনির্দেশ করতে চাই (কারণ আমার ইনপুটগুলি বড় ভিডিও ফাইল, যা আমি ফ্লাই অন ট্রান্সকোড করতে চাই)। পরীক্ষার মাধ্যমে, আমি নিম্নলিখিতগুলি ব্যবহার করছি, যা কার্যকরীভাবে ঠিক:

my_program --input1 /dev/fd/63 --input2 /dev/fd/62 <( {video transcoding command 1} ) <( {video transcoding command 2} )

আমার প্রশ্নটি: ফাইল বর্ণনাকারী নম্বর 63৩ এবং 62২ কেন? তারা কি সর্বদা এই মানগুলি নেওয়ার নিশ্চয়তা দেয়, বা এই সিস্টেম নির্ভর?

এটি যদি ভালভাবে নথিভুক্ত থাকে তবে দুঃখিত, তবে আমি এখনও পর্যন্ত আমার অনুসন্ধানে এটি খুঁজে পাচ্ছি না।

আপনার সময় জন্য ধন্যবাদ!


আমি আপনার প্রশ্নের উত্তর জানি না - তবে, ব্যাশে, my_program --input1 <( {video transcoding command 1} ) --input2 <( {video transcoding command 2} )সমান হওয়া উচিত নয় , স্পষ্টভাবে পাইপ ফাইল বর্ণনাকারী নির্দিষ্ট করার প্রয়োজন ছাড়া?
স্টিল্ড্রাইভার

আহা, আমি সেই বাক্য গঠন সম্পর্কে সচেতন ছিলাম না। হ্যাঁ, এটাই আমার দরকার, ধন্যবাদ!
গিকিডেল

উত্তর:


2

ভিডিওতে অনুসন্ধানের জন্য ভিডিওপ্রোসেসিং সুবিদিত। এর অর্থ আপনি ইনপুট হিসাবে কোনও স্ট্রিম ব্যবহার করতে পারবেন না। এবং যদি আপনি অন্য প্রোগ্রাম থেকে আউটপুট ব্যবহার করছেন, তবে এটি স্ট্রিম - আপনি পাইপ বা এফডিএস ব্যবহার করেন না তা বিবেচনা করুন।

তবে সম্ভবত আপনি ভাগ্যবান যে আপনার প্রোগ্রামটি পাইপ ব্যবহার করতে পারে। সেক্ষেত্রে এটি ঠিক করা উচিত:

my_program --input1 <( {video transcoding command 1} ) --input2 <( {video transcoding command 2} )

<() দেখতে পাবেন যেন এটি আপনাকে স্টিডিনে কিছু দিচ্ছে ঠিক <দের মতো। তবে তা হয় না। পরিবর্তে এটি পাইপের একটি লিঙ্কের সাথে প্রতিস্থাপিত হয়:

$ echo <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true) <(true)
/dev/fd/63 /dev/fd/62 /dev/fd/61 /dev/fd/60 /dev/fd/59 /dev/fd/58 /dev/fd/57 /dev/fd/56 /dev/fd/55 /dev/fd/54 /dev/fd/53 /dev/fd/52 /dev/fd/51 /dev/fd/50 /dev/fd/49 /dev/fd/48 /dev/fd/47 /dev/fd/46 /dev/fd/45 /dev/fd/44 /dev/fd/43 /dev/fd/42 /dev/fd/41 /dev/fd/40 /dev/fd/39 /dev/fd/38 /dev/fd/37 /dev/fd/36 /dev/fd/35 /dev/fd/34 /dev/fd/33 /dev/fd/32 /dev/fd/31 /dev/fd/30 /dev/fd/29 /dev/fd/28 /dev/fd/27 /dev/fd/26 /dev/fd/25 /dev/fd/24 /dev/fd/23 /dev/fd/22 /dev/fd/21 /dev/fd/20 /dev/fd/19 /dev/fd/18 /dev/fd/17 /dev/fd/16 /dev/fd/15 /dev/fd/14 /dev/fd/13 /dev/fd/12 /dev/fd/11 /dev/fd/10 /dev/fd/9 /dev/fd/8 /dev/fd/7 /dev/fd/6 /dev/fd/5 /dev/fd/3 /dev/fd/4 /dev/fd/64 /dev/fd/65 /dev/fd/66 /dev/fd/67
$ ls -l <(true)
lr-x------ 1 tange tange 64 Nov 12 07:59 /dev/fd/63 -> pipe:[1200523]

সুতরাং আপনি এমন পরিস্থিতিতে থাকতে পারেন যেখানে এটি অর্থবোধ করে:

$ cmd 2> >(cmd2) | cmd3

এটি প্রকৃতপক্ষে কেস হয় যে আমার প্রোগ্রামটি পাইপ ব্যবহার করতে পারে (এবং বিশেষত সেই বিষয়টি মাথায় রেখেই লেখা হয়েছে)। প্রতিটি ইনপুট (উপরে আপনার প্রথম কোড ব্লক) -এ একটি কমান্ড পুনঃনির্দেশ করার সিনট্যাক্স সম্পর্কে আমি অবগত ছিলাম না, যা আমার প্রয়োজন ঠিক তাই। ধন্যবাদ!
geekydel
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.