কোনও কমান্ডের কাছে একটি পাইপ পাস যা কোনও ফাইলের নাম আশা করে Pass


19

আমি তোমার ভালো দখল আছে বলুন fooযা ফাইলের নাম আর্গুমেন্ট গ্রহণ করা: foo myfile.txt। বিরক্তিকরভাবে, fooস্ট্যান্ডার্ড ইনপুট থেকে পড়া হয় না। প্রকৃত ফাইলের পরিবর্তে, আমি এটিকে অন্য একটি কমান্ডের ফলাফলটি পাস করতে চাই (বাস্তবে pv, যা ফাইলটি তৈরি করে এবং পার্শ্ব প্রতিক্রিয়া হিসাবে একটি অগ্রগতি মিটার আউটপুট তৈরি করবে)।

এটি করার কোনও উপায় আছে? আমার কৌতুক ব্যাগের কিছুই এটি মনে হচ্ছে না।

( fooএই ক্ষেত্রে একটি পিএইচপি স্ক্রিপ্ট যা আমি বিশ্বাস করি যে ধারাবাহিকভাবে ফাইলটি প্রক্রিয়া করে)।

আমি উবুন্টু এবং বাশ ব্যবহার করছি

সম্পাদনা সামান্য অস্পষ্ট সমস্যার বর্ণনার জন্য দুঃখিত, তবে আমি যা চাই তা উত্তর এখানে দেয়:

pv longfile.txt | foo /dev/stdin

আমি এখন এটি দেখতে খুব স্পষ্ট।


আপনি কি ওয়ান-লাইনার খুঁজছেন?
ডেভ ভুলেজ

আপনি কী নিশ্চিত foo স্ট্যান্ডিন থেকে এটি পড়ার জন্য "-" একটি যুক্তি গ্রহণ করেন না?
রেক্যান্ডবোনম্যান

দুঃখের বিষয় হ্যাঁ, এই ক্ষেত্রে - এটি একটি পিএইচপি স্ক্রিপ্ট।
স্টিভ বেনেট

হ্যাঁ, আসলে ।
স্টিভ বেনেট

উত্তর:


19

আপনি যদি সঠিকভাবে করতে চান তা যদি আমি বুঝতে পারি তবে আপনি এটি বাশের আদেশ আদেশ প্রতিস্থাপন বৈশিষ্ট্য সহ করতে পারেন:

foo <(somecommand | pv)

এটি mkfifoবেস ভিত্তিক উত্তরগুলি যা বোঝায় তার সাথে অনুরূপ কিছু করে, ব্যশ আপনার জন্য বিশদটি পরিচালনা করে (এবং এটি নিয়মিত নামযুক্ত পাইপের পরিবর্তে / dev / fd / 63 এর মতো কিছু কমান্ডের কাছে চলে যায়)। আপনি এটি আরও সরাসরি এটি করতে সক্ষম হতে পারে:

somecommand | pv | foo /dev/stdin

1
ওহ, সুন্দর! pv inputfile.txt | foo /dev/stdinআমি ঠিক এটিই খুঁজছিলাম, তবে ভাবি নি।
স্টিভ বেনেট

Woot! / dev / stdin
s

<(.)আমার জন্য কাজ। এই সিনট্যাক্সটি কি বাশ ম্যানুয়ালটিতে নথিভুক্ত করা হয়েছে? (.)কমান্ড প্রতিস্থাপন নথি হিসাবে আমি বুঝতে পারি , তবে এর সংমিশ্রণটি <ব্যাখ্যা সহ দেখতে পেলাম না ।
ফ্লো

@ ফ্লো 2 কে একে "প্রক্রিয়া প্রতিস্থাপন" বলা হয় - বাশ ম্যানুয়ালটির ৩.৫..6 অংশ দেখুন ।
গর্ডন ডেভিসন

বুঝেছি. আপনি ঠিক বলেছেন - এতে উল্লেখ করা হয়েছে যে এতে নামযুক্ত পাইপ / ব্যবহার করা হয়েছে mkfifo
ফ্লো


2

এই ইউনিক্স এসই প্রশ্নের একটি উত্তর রয়েছে যা দেখায় যে কীভাবে একটি অস্থায়ী নামযুক্ত পাইপ তৈরি করবেন:

শেল স্ক্রিপ্ট এমকেটেম্প, অস্থায়ী নামযুক্ত পাইপ তৈরির সেরা পদ্ধতি কোনটি?

উত্তরগুলির উপর ভিত্তি করে, আপনি নিম্নলিখিতগুলির মতো কিছু করতে পারেন:

tmppipe=$(mktemp -u)
mkfifo -m 600 "$tmppipe"
pv examplefile > $tmppipe

তারপরে আপনি পাইপটি দেখতে পেলেন:

foo $tmppipe

তারপরে এটি শেষ হয়ে গেলে এটি মুছুন।


1

Mkfifo ব্যবহার করার চেষ্টা করুন।

mkfifo file_read_by_foo; pv ... > file_read_by_foo 

অন্য শেল-এ, foo file_read_by_foo চালান


0

xargs এটির জন্য ভাল কাজ করছে বলে মনে হচ্ছে:

echo longfile.txt | xargs pv

এটি আলাদা কিছু করে: pvএকাধিকবার চলমান , প্রতিটি এক বা একাধিক লাইনের সাথে আঁকা longfile.txt। আমি এখানে পরে যা করছি তা মোটেই নয়।
স্টিভ বেনেট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.