স্ক্রিপ্টের স্টিডিনে একাধিক ফাইলের বিষয়বস্তু খাওয়ানোর জন্য শর্টহ্যান্ড


20

ধরা যাক আমার কাছে একটি স্ক্রিপ্ট বলা আছে script, যা পড়ে stdinএবং স্ক্রিনে কিছু ফলাফল ছড়িয়ে দেয়।

যদি আমি এটি একটি ফাইলের বিষয়বস্তু খাওয়াতে চাইতাম তবে আমি টাইপ করতাম:

$ ./script < file1.txt

তবে আমি যদি একাধিক ফাইলের বিষয়বস্তু একইভাবে স্ক্রিপ্টে ফিড করতে চাই তবে তা কি আদৌ সম্ভব? আমি এখন পর্যন্ত যে সেরাটি নিয়ে এসেছি তা হ'ল:

cat file1.txt file2.txt > combined.txt && ./script < combined.txt

যা দুটি কমান্ড ব্যবহার করে এবং একটি টেম্প ফাইল তৈরি করে। সম্মিলিত ফাইল তৈরি করে বাইপাস করে একই জিনিস করার কোনও উপায় আছে কি?


স্যুইচ করুন zshএবং আপনি চালাতে সক্ষম হবেন cmd <file1 <file2 ... <fileN;)
don_crissti

উত্তর:


20

আপনি catএবং একটি পাইপ ব্যবহার করতে পারেন :

cat file1 file2 file3 ... fileN | ./script

আপনার উদাহরণ, পাইপ ব্যবহার করে এবং কোনও টেম্প ফাইল নেই:

join file1.txt file2.txt | ./script

ডি ওহ। এটি এত সহজ যে আমি নিজেও কীভাবে এটি উপলব্ধি করতে পারি তা নিশ্চিত নই। ধন্যবাদ!
0x4B1D

10
বিড়াল পুরষ্কারের ব্যবহারিক ব্যবহার!
গ্লেন জ্যাকম্যান

4
@ ব্রুস এডিগার: আমি ধরে নিয়েছি আপনি joinকোনও টেম্প ফাইল ছাড়াই ব্যবহারের উপায়টি দেখিয়েছিলেন , তবে কেবল এটি পাঠকের কাছে পরিষ্কার করার জন্য: cat f1 f2join f1 f2
পিটার.ও

@ ফ্রেডকে এটি নির্দেশ করার জন্য ধন্যবাদ - আমি joinআমার উদাহরণটিতে ব্যবহার করেছি কারণ আমি এর সাথে আগে খেলছিলাম; বাস্তবে, আমার উদাহরণ হিসাবে আমি ব্যবহার করছিলাম cat
0x4B1D

10

আপনি যদি কোনও পাইপ ব্যবহার করতে না চান তবে আপনি প্রক্রিয়া প্রতিস্থাপনের সাথে ইনপুট পুনঃনির্দেশ ব্যবহার করতে পারেন:

./script <(cat file1 file2)

3

@ জোনাঃ ব্রান এর উত্তর যোগ করতে, আপনার স্ক্রিপ্টে যদি কখনও প্রসেস আউটপুট যুক্ত করতে হয় তবে আপনার ফাইলটি সম্ভবত আপনার ডিস্কে নাও থাকতে পারে তবে URLব্যবহার curlবা অনুরূপ সরঞ্জামের মাধ্যমে অ্যাক্সেস করা যেতে পারে ।

এরকম কিছু ব্যবহার stdoutএকাধিক প্রক্রিয়া পেতে এবং সেগুলির মাধ্যমে স্ক্রিপ্টে ব্যবহার করতে পারেstdin

ইনপুট সামগ্রীগুলি হ্যান্ডেল করার জন্য এটিই স্ক্রিপ্ট হবে multi-input.sh:

#!/usr/bin/env bash
while read line; do
    echo $line
done

এখন এটি পরীক্ষা করুন:

$ ./multi-input.sh < <(cat <(echo process 1) <(echo process 2) <(echo process 3))

আউটপুট:

process 1
process 2
process 3

<()যদি আপনি চান fileব্যবহার করে প্রক্রিয়াটিকে ভার্চুয়াল রূপান্তরিত করে fd, তাই <এটি পড়ার প্রয়োজন needed catনিজেই এর প্রয়োজন হয় না কারণ এটি যা করে তা করে, ফাইলগুলি ভার্চুয়াল বা আসল করে।

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