একটি ভার্চুয়াল ফাইল তৈরি করুন যা আসলে একটি আদেশ


18

ভার্চুয়াল ফাইল তৈরির কোনও উপায় আছে যেমন ফাইলটি পড়া stdoutকোনও কমান্ডের পাঠ থেকে আসে ; ফাইলে লিখতে কি আকস্মিকভাবে stdinকোনও কমান্ড লেখা হয় ?

এখন পর্যন্ত আমি এটিকে inotifywaitএকটি ফাইলের সাথে ক্লড করে রেখেছি , যা ফাইলটি সংশোধন করার সময় একটি কমান্ড কল করে, ফাইলটি থেকে ইনপুট নেয় এবং এটিতে আবার লেখা হয়।

আমি পছন্দ করি না inotifywaitযদিও যদিও নিয়মিতভাবে পুনরায় চালু করতে হবে (এবং এটি নিশ্চিত করতে হবে যে এটি সর্বদা চলছে)। আমি কেবল সপ্তাহে দু'বার এই ফাইলটি ব্যবহার করি।

উত্তর:


17

আপনি একটি নামী পাইপ খুঁজছেন হতে পারে ।

mkfifo f
{
  echo 'V cebqhpr bhgchg.'
  sleep 2
  echo 'Urer vf zber bhgchg.'
} >f
rot13 < f

পাইপে লেখা শ্রবণ কার্যক্রম শুরু করে না। আপনি যদি কোনও লুপে ইনপুট প্রক্রিয়া করতে চান তবে আপনার একটি শ্রবণ প্রোগ্রাম চালু রাখতে হবে।

while true; do rot13 <f >decoded-output-$(date +%s.%N); done

নোট করুন যে পাইপটিতে লিখিত সমস্ত ডেটা একত্রীকরণ করা হয়েছে, একাধিক প্রক্রিয়া লেখা থাকলেও। যদি একাধিক প্রক্রিয়া পড়তে থাকে তবে কেবলমাত্র একটি ডেটা পায়। সুতরাং একটি পাইপ সহবর্তী পরিস্থিতিতে উপযুক্ত নাও হতে পারে।

একটি নামী সকেট সমবর্তী সংযোগগুলি পরিচালনা করতে পারে তবে এটি বেসিক শেল স্ক্রিপ্টগুলির ক্ষমতার বাইরে।

স্কেল সবচেয়ে জটিল শেষের দিকে রয়েছে কাস্টম ফাইল সিস্টেম , আপনি ডিজাইন এবং একটি ফাইল সিস্টেম যেখানে প্রতিটি মাউন্ট করতে দেয় যা open, writeইত্যাদি একটি প্রোগ্রাম একটি ফাংশন আরম্ভ করে। ন্যূনতম বিনিয়োগ হ'ল অজস্র কোডিংয়ের কয়েক লাইন, উদাহরণস্বরূপ পাইথনে । আপনি যদি ফাইলগুলি পড়ার সময় কেবল কমান্ডগুলি প্রয়োগ করতে চান তবে আপনি স্ক্রিপ্ট বা ফিউজফ্ল্ট ব্যবহার করতে পারেন ।


3

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

আমি এই প্রশ্নের নিজের উত্তরটি অনুসন্ধান করেছি এবং কেবলমাত্র আমি যা করতে পেরেছি তা হ'ল স্ক্রিপ্টফস যা ফিউজ ভিত্তিক ।


1

কি আপনি বর্ণনা মূলত একটি হিসাবে FIFO বিশেষ ফাইল দেখুন fifo(7)। এগুলি সেগুলি দ্বারা তৈরি করা হয় mkfifo(1)এবং একটি প্রক্রিয়া তারপরে লিনাক্সের অধীনে আর / ডাব্লুয়ের জন্য এটি খুলতে পারে (সমস্ত ইউনিক্সি সিস্টেম এটি পরিচালনা করে না)। দুটি স্বতন্ত্র প্রক্রিয়া তার পরে যোগাযোগের জন্য এটি ব্যবহার করতে পারে।


0

"ভার্চুয়াল ফাইল তৈরি করা যা আসলে কমান্ড হয়" এর সহজ উপায় হ'ল ফুস ফাইল সিস্টেমটি প্রসারিত করা। ফিউসপির মতো লাইব্রেরিগুলি করা খুব সহজ।

এখানে FUSE ফাইল সিস্টেমের একটি উদাহরণ রয়েছে যা আপনাকে HTTP / HTTPS / FTP ফাইলগুলি পড়তে দেয় যেন সেগুলি আপনার নিজের লিনাক্স বাক্সে উপস্থিত রয়েছে। আপনি একইভাবে এমন কিছু তৈরি করতে পারেন যা পড়তে একই জন্য কোনও আদেশ চালায়।

যদি আপনি উত্স কোডটি দেখেন তবে এটি কোডের খুব কমই 50 লাইন (কোনও বয়লারপ্লেট কোড বাদে)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.