EOF এর পরে কোনও কারণ ছাড়াই কোনও প্রক্রিয়ার স্টিডিনে ডেটা পাইপ করা


33

আমার কাছে একটি এক্সিকিউটেবল রয়েছে যা একটি ব্যবহারকারী-ইন্টারেক্টিভ শেল শুরু করে। আমি শেলটি চালু হওয়ার পরে প্রথমে কয়েকটি কমান্ড ইনজেকশন করতে চাই, তারপরে ব্যবহারকারীকে তাদের ইন্টারেক্টিভ সেশন করার অনুমতি দিন। আমি এটি ব্যবহার করে সহজেই করতে পারি echo:

echo "command 1\ncommand 2\ncommand3" | ./shell_executable

এটি প্রায় কাজ করে। সমস্যাটি হ'ল প্রক্রিয়াটির স্টিডিনকে খাওয়াতে থাকা ইকো কমান্ডটি আমার কমান্ডগুলি প্রতিধ্বনিত হওয়ার পরে ইওএফ হিট করে। এই ইওএফটির ফলে শেলটি তত্ক্ষণাত বন্ধ হয়ে যায় (যেন আপনি শেলটিতে Ctrl + D চাপতেন) d

পরে কোনও EOF তৈরি না করে এই কমান্ডগুলি স্টিডিনে ইনজেক্ট করার কোনও উপায় আছে কি?


আপনি কি ./shell_executableআদেশের তালিকার শেষে যোগ করার চেষ্টা করেছেন ? এটি হয়ত চালিয়ে যেতে পারে, যদিও আপনার দুটি চলমান দৃষ্টান্ত (পিতা বা মাতা এবং সন্তানের) থাকবে।
স্বর্ণলোকস

উত্তর:


40

স্ট্যাকওভারফ্লোতে অনুরূপ প্রশ্নের মধ্যে এই চতুর উত্তরটি পেয়েছে

(echo -e "cmd 1\ncmd 2" && cat) | ./shell_executable

এই কৌশলটি করে। শেল_একটিভেটেবলের ইনপুট স্ট্রিমের catআউটপুটটি পাম্প করবে echoএবং ইওএফ না হওয়া পর্যন্ত আরও ইনপুটগুলির জন্য অপেক্ষা করবে।


@ jw013 আপনি ঠিক বলেছেন আমি পোস্টটি সম্পাদনা করেছি। ধন্যবাদ। যখন আমি ডাব্লু / ও প্রথম বন্ধনী পরীক্ষা করেছি তখন আমি cmd 1আবার লিখিত দেখেছি কিন্তু বুঝতে পারি নি যে এটি তৈরি করা ও / পি হওয়া উচিত ছিলcmd 1
গওথাম

এই দুর্দান্ত কাজ! আপনি আমাকে এক টন সময় বাঁচিয়েছেন। ধন্যবাদ!!
জেগডসফট

22

এই কাজ করতে পরিষ্কার পথ সম্ভবত ভালো কিছু সন্ধান করা হয় bashএর --rcfileবিকল্প। আপনার কাস্টম ফাইলগুলিতে আপনার কাস্টম কমান্ডগুলি রাখুন এবং এটি স্টার্ট-আপ চালানোর জন্য ইন্টারেক্টিভ শেলকে দিন।

এ জাতীয় কোনও বিকল্প উপস্থিত না থাকলে আপনি নিম্নলিখিত বিষয়গুলিও দেখতে পারেন:

cat custom_commands_file - | ./shell_executable

cat-stdin হিসাবে ব্যাখ্যা করবে ।


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