বাশ কমান্ড আউটপুট থেকে 'ভার্চুয়াল ফাইল' তৈরি করবেন?


36

আমি আশ্চর্য হই যে বাশ আউটপুট থেকে 'ভার্চুয়াল ফাইল' তৈরি করার কোনও উপায় আছে কিনা?

উদাহরণ: ধরা যাক আমি mysqldumpবাহ্যিক ইমেল ঠিকানার সংযুক্তি হিসাবে আউটপুটটি ইমেল করতে চাই । আমি মুটকে এটি করতে ব্যবহার করতে পারি। আমার যে muttঅপশনটি ব্যবহার করা দরকার তা হ'ল -a <name of the file I want to attach>। আমি জানি আমি একটি অস্থায়ী ফাইল ব্যবহার করতে পারি:

mysqldump mysqldumpoptions > /tmp/tempfile && mutt -a /tmp/tempfile admin@example.org

তবে আমি তার পরিবর্তে mysqldumpআউটপুটটিকে সরাসরি মুত্তে নিয়ে যেতে চাই। মুটের -aবিকল্পটি কেবল একটি ফাইলই গ্রহণ করে না একটি স্ট্রিমকেই, তবে সম্ভবত এটির জন্য কোনও ধরণের ভার্চুয়াল ফাইল বর্ণনাকারী বা সেই লাইনগুলি বরাবর কিছু পাস করার উপায় রয়েছে। কিছুটা এইরকম:

mutt -a $(mysqldump mysqldumpoptions) admin@example.org

এটা কি সম্ভব? তা না হলে কেন?

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


1
আমি <() কাজ করতে পারি না যতক্ষণ না বুঝেছি আমি ব্যাশের পরিবর্তে sh ব্যবহার করছি। এটা দুর্দান্ত কাজ করছে। আমি (যদি) সর্বনিম্ন প্রয়োজনীয় খ্যাতিতে পৌঁছে যাই তখন আমি সহায়ক প্রতিক্রিয়াগুলিকে উজ্জীবিত করব। সব প্রতিক্রিয়া জন্য আপনাকে ধন্যবাদ।
পিয়েরে

উত্তর:


53

আপনি যা চান তা করার এটিই পরিষ্কার উপায়:

mutt admin@example.org -a <(mysqldump mysqldumpoptions)

<()অপারেটর তোমার জন্য কি জিজ্ঞাসা করা হয়; এটি একটি ফিফো তৈরি করে (বা / দেব / এফডি) এবং একটি প্রক্রিয়া জোর করে এবং স্টাডাউটকে ফিফোর সাথে সংযুক্ত করে। >()পরিবর্তে স্টিডিনকে ফিফোর সাথে সংযুক্ত করা ব্যতীত একই কাজ করে। অন্য কথায়, এটি পর্দার আড়ালে আপনার জন্য সমস্ত এমকনড স্টাফ করে; বা একটি আধুনিক ওএসে এটি আরও ভাল উপায়ে করে।

অবশ্যই, বাদে এটি মুটের সাথে কাজ করে না, এটি বলে:

/dev/fd/63: unable to attach file.

আমার সন্দেহ হচ্ছে সমস্যাটি হ'ল মিট ফাইলটি অনুসন্ধান করার চেষ্টা করছে যা আপনি কোনও ধরণের পাইপের মাধ্যমে করতে পারবেন না। অনুসন্ধানটি সম্ভবত মাইম টাইপটি কী এবং কী এনকডিংগুলি কাজ করতে পারে তা নির্ধারণ করার জন্য ফাইলটি স্ক্যান করার মতো কিছু (যেমন ফাইলটি 7 বিট বা 8 বিট কিনা) এবং তারপরে প্রকৃতপক্ষে বার্তায় এনকোড করার জন্য ফাইলটির শুরুতে চেষ্টা করা ।

আপনি যা পাঠাতে চান তা যদি সরল পাঠ্য হয় তবে আপনি ইমেলের মূল বিষয়বস্তু পরিবর্তে সর্বদা এটির জন্য কিছু করতে পারেন (আদর্শ নয়, তবে এটি আসলে কাজ করে):

mysqldump mysqldumpoptions | mutt -s "Here's that mysqldump" admin@example.org

2
অসাধারণ! আমি প্রথমবারের মতো এ জাতীয় পুনর্নির্দেশটি দেখছি।
সৌরভ বারজাতিয়া

ভাল ব্যাখ্যার জন্য আপনাকে ধন্যবাদ! আমি / ও পুনঃনির্দেশের কোনও টিউটোরিয়ালে এটি আগে কখনও দেখিনি।
খ্রিস্টান মান

4

আমি মনে করি আপনি যা খুঁজছেন তা ব্যবহারের একটি ফিফো mknod

mknod /tmp/foo p

echo hello > /tmp/foo &

cat /tmp/foo

দ্রষ্টব্য, পাঠ প্রক্রিয়া না থাকলে লেখার প্রক্রিয়াটি ব্লক হয়ে যাবে।

যেমন

mknod /tmp/foo p

mysqldump mysqldumpoptions > /tmp/foo &

mutt -a /tmp/foo

1

এটি একটি সংযুক্তি করা প্রয়োজন? যদি এটি কোনও বার্তার প্রধান অংশ হিসাবে উপস্থিত হতে পারে (--বিট ক্লিন আসকি, নিজেই কোনও লাইনে '।' ধারণ করে না) তবে এর মতো কিছু কাজ করবে:

mysqldump mysqldumpoptions | মিট-এস "আজকের মাইএসকিএল ডাম্প" অ্যাডমিন@example.org


1

আপনি /dev/stdinমুট দিয়ে ফাইলের নামটি ব্যবহার করতে সক্ষম হতে পারেন, এটি এর স্টিডিন থেকে পড়বে।

mysqldump mysqldumpoptions | mutt -a /dev/stdin admin@example.org

এইচএম, আমি এটি চেষ্টা করেছি এবং মিট অভিযোগ করছি:

/dev/stdin isn't a regular file.
/dev/stdin: unable to attach file.

আচ্ছা ভালো. আমি মনে করি এটি আপনার প্রশ্নের উত্তর দেয়, তবে -aবিকল্পটি মিট একটি নিয়মিত ফাইলের প্রত্যাশা করে যা কোনও ডিভাইস বা পাইপকে বোঝায় না।


1

একটি ফিফো সম্ভবত সেরা উপায়। তবে আপনি mkfifo /path/to/fifoপরিবর্তে ব্যবহার করতে পারেন


0

আমি এখানে কিছু অনুপস্থিত হতে পারি, তবে কেন / ইউএসআর / এসবিন / সেন্ডমেলের (বা এটি যেখানে আপনার ডিস্রোতে থাকে সেখানে) চাকরির মতো শোনাতে মুত্ত কেন ব্যবহার করবেন?

mysqldump mysqldumpoptions | সেন্ডমেল অ্যাডমিন@example.org

বেশিরভাগ ইউনিক্স এমটিএগুলি একটি / usr / sbin / সেন্ডমেল কমান্ড সরবরাহ করে এবং তারা সকলেই কম-বেশি একই বিকল্পগুলি বুঝতে পারে এবং আরও বা কম-একই পদ্ধতিতে কাজ করে। প্রায় সব ক্ষেত্রেই আপনার কোন নির্দিষ্ট এমটিএ / প্রেরণ মেইল ​​ব্যবহার করছেন তা যত্ন নেওয়ার দরকার নেই।

মেল / মেলেক্স সহ আরও বেশ কয়েকটি বিকল্প রয়েছে


1
তবে এটি কোনও সংযুক্তি নয়, যা প্রাপকের জন্য ব্যবহার করা শক্ত বলে মনে হয়
ফ্রেইহাইট

1
সেক্ষেত্রে আরও ভাল সমাধান হ'ল মেটামাইল (1) বা মাইম-কনস্ট্রাক্ট (1 পি) এর মতো কোনও সরঞ্জাম ব্যবহার করা বা পার্ল মাইম :: লাইট মডিউল (আমার ব্যক্তিগত পছন্দ কারণ এটি করা সহজ করে তোলে) এর মতো কিছু ব্যবহার করে নিজের লেখা writing সর্বাধিক সাধারণ মাইম সম্পর্কিত জিনিস)।
ক্যাস

0

Mutt -a বিকল্পটি নির্দিষ্টভাবে /etc/mime.tyype এ সংজ্ঞায়িত MIME প্রকারগুলি ব্যবহার করে। আপনি যে ভার্চুয়াল ফাইল টাইপগুলি মনে করেন তা আসলে একটি বৈধ মাইম টাইপ নিবন্ধীকৃত, তাই আমি মনে করি না যে ম্যাট সংযুক্তি কাজ করবে। কেবল ধারণার প্রমাণের জন্য, আপনি মাইম-সমর্থন প্যাকেজ ইনস্টল করার চেষ্টা করতে পারেন (যা মাইম ফাইল অ্যাক্সেস বাইনারিগুলি যেমন দেখুন, সম্পাদনা ইত্যাদির ব্যবস্থা করে) এবং ভার্চুয়াল ফাইলের বিপরীতে চালিত (একটি পাইপ বলুন) দেখতে পাবেন যে এটি করে এটি চিনতে হবে না। মূল সমস্যাটি হ'ল সাধারণত একটি ভার্চুয়াল ফাইলটি মেমরিতে ডেটা সামগ্রী ধারণ করে, ডিস্কে নয়, ফাইল অবজেক্টটি কেবলমাত্র একটি পয়েন্টার। এমনকি আপনি টার / জিজেডের সাথে ভার্চুয়াল ফাইলটি মোড়ানোর চেষ্টা করতে পারেন এবং মুটকে খুশি করতে পারেন তবে আমি সন্দেহ করি যে আপনি অন্য প্রান্ত থেকে কার্যকর কিছু পাবেন ... :)

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