কম বাধা কম


13

আমি প্রায়শই কম প্রোগ্রাম আউটপুট পাইপ, যেমন

produce_output | less

এটি দুর্দান্ত কাজ produce_outputকরে , যতক্ষণ না বড় পরিমাণে আউটপুট তৈরি হয়। যদি আমি এমন কিছু পাঠ্য অনুসন্ধান করি যা ফাইলের গভীরে রয়েছে তবে কম রিপোর্ট হবে

Calculating line numbers... (interrupt to abort)

যদি আমি কন্ট্রোল + সি এর সাথে বাধা দেয় তবে এটি হত্যা করে produce_output, যা এটি আরও আউটপুট উত্পাদন করা থেকে বিরত রাখে। কম বাধা দেওয়ার জন্য কী কোনও উপায় আছে, যাতে produce_outputচলতে থাকে?

আমি জানি যে আমি ব্যবহার করতে পারি kill -INT less_process, তবে আমি মনে করি এর থেকে আরও ভাল সমাধান অবশ্যই হবে।

উত্তর:


15

সাধারণত পাইপলাইনে সমস্ত প্রক্রিয়া একই প্রক্রিয়া গোষ্ঠীতে চালিত হয় , যার ফলে তাদের সমস্ত সংকেত গ্রহণ করে। আপনি একটি পৃথক pgrp setsid foo | lessচালানোর জন্য ব্যবহার করতে পারেন foo


ওপি দ্বারা উত্থাপিত সমস্যার আলোকে দেখে মনে হয় যে সিটিআরএল + সি কম বাধা দেওয়ার উপায় হিসাবে ব্যবহারের সিদ্ধান্ত নেওয়া খুব দুর্ভাগ্যজনক। আপনি কি জানেন যে কেন এই নির্দিষ্ট সংকেতটি বেছে নেওয়া হয়েছিল? অন্য কিছু সিগন্যাল কম সমস্যা হবে?
পাইটর ডব্রোগোস্ট

@ পাইওটারডব্রোগোস্ট: আপনি আর কোন সিগন্যালের পরামর্শ দিবেন? এমন অনেকগুলি নেই যেগুলি কীবোর্ড শর্টকাটকে উত্সর্গীকৃত করেছে, কেবল সাইন ইন (Ctrl-C) এবং সাইনকিউটি (Ctrl- \), এবং পরবর্তীগুলি কেবলমাত্র বাধা নয়, তত্ক্ষণাত প্রোগ্রামটি থেকে বেরিয়ে আসা। বাকিগুলি কেবলমাত্র মাধ্যমে উপলব্ধ kill
user1686

মনে হচ্ছে সমস্যাটি কম বাধা দেওয়ার জন্য সিগন্যাল ব্যবহার করার কারণে হয়েছে। পরিবর্তে, এটি যদি কিছু সাধারণ কী / শর্টকাট হয় তবে আমাদের সমস্যাটি প্রথম স্থানে থাকত না। তবে আমি অনুমান করি যে সিগন্যালের প্রয়োজনীয়তা এ থেকে আসে যে প্রক্রিয়াটি selectএকই সাথে কোনও ফাইল / পাইপ এবং টার্মিনাল উভয় থেকেই ইনপুটটির জন্য অপেক্ষা করতে পারে না ।
পাইওটার ডব্রোগোস্ট 21'15 21:49 এ

@ পাইওটারডব্রোগোস্ট: এটি F(ফলো) মোড কীভাবে কাজ করে তা করতে পারে। পাইপ এবং ttys একইভাবে পরা যায়।
ব্যবহারকারীর 6868 13

মোডে কাজ করার উপায়টি কেন আপনি মনে করেন? আমি মনে করি ইভেন্টগুলির প্রবাহ হ'ল শেলটি সিটিআরএল + সি পায় এবং সিগিন্ট সিগন্যালটি কমটিতে প্রেরণ করে যা কীবোর্ড / টার্মিনাল না শুনে এই সংকেতটিকে অবিচ্ছিন্নভাবে পেল ।
পাইওটর ডব্রোগোস্ট

9

আপনি লাইন নম্বরগুলি অক্ষম করতে পারেন

   -n or --line-numbers

বিকল্প।

produce_output | less -n

-১: ওপির উদ্দীপনাজনিত সমস্যা সমাধান করতে পারে তবে ওপি-র প্রকৃত প্রশ্নের উত্তর দেওয়ার জন্য কিছুই করে না (যেমন, কোনও প্রক্রিয়া বাধাগ্রস্থ করা)।
গোল্ডপিউডো

2
দুঃখিত, তবে এমন বৈশিষ্ট্যটি দিয়ে কম শুরু করা যা চায় না এবং তারপরে একটি স্যুইচটি অক্ষম করতে এমন কোনও বৈশিষ্ট্য অক্ষম করার জন্য একটি সংকেত প্রেরণের চেষ্টা করুন যা কোনও সমাধান নয়। অবশ্যই @ গ্র্যাটিউটি সমাধানটি দুর্দান্ত (এবং আমি এটির ভোট দিয়েছি) তবে এগিয়ে আসুন: কোনও কাজকে (লাইন গণনা) বাধা দেওয়ার জন্য সিগন্যাল প্রেরণ করতে অন্য গ্রুপে প্রথম প্রক্রিয়া শুরু করা দরকার যা খুব সামান্যই খুব দরকার অনেক কাজ।
ম্যাটিও

1
এটি আমার প্রশ্নের উত্থাপিত সমস্যার একটি ন্যায্য সমাধান। তবে, বাধাগুলি কেবল কম রেখায় গণনার চেয়ে বেশি থামে - উদাহরণস্বরূপ, তারা দীর্ঘ অনুসন্ধানে বাধা দেবে। সুতরাং, @ গ্র্যাভিটির সমাধানটিকে অগ্রাধিকার দেওয়া হয়েছে, যেহেতু এটি কম ব্যবস্থায় যে কোনও বিঘ্নের ব্যবহার কভার করবে। এই প্রশ্নের আরও সুস্পষ্টভাবে সম্বোধন না করার জন্য আমার খারাপ!
এড ম্যাকম্যান 10'12

@ এডএমসিমন নিশ্চিত যে আমি মহাকর্ষের সমাধানটিকেও ভোট দিয়েছি এবং আমি এমন নতুন কিছু শিখতে পেরে খুশি যা সর্বদা কার্যকর হতে পারে।
মাত্তেও

0

প্রচুর পরিমাণে আউটপুট নিয়ে কাজ করার সময়, আমি একটি ফাইলের কাছে আউটপুট প্রেরণ এবং ব্যবহার করতে tail -fবা less +Fদেখার জন্য এটি খুব সহায়ক বলে মনে করেছি :

produce_output > out 2>&1 & less +F out

2>&1সিনট্যাক্স নিশ্চিত করুন যে উভয় stdout- এ এবং দ্বারা stderr চলতে চলতে তোলে out--- অপসারণ যে আপনি যদি শুধুমাত্র চান stdout- এ ফাইলে যাচ্ছে। এইভাবে, আপনি আউটপুট উত্পাদনকারী প্রোগ্রামের সাথে গোলযোগ না করেই বিভিন্ন উপায়ে (এমনকি কোনও আলাদা মেশিন থেকে) আউটপুটটি পরীক্ষা করতে পারেন।

নোট যে 2>&1বাশ-নির্দিষ্ট হতে পারে (আমি নিশ্চিত না)। আপনার কাছে আউটপুট ফাইলের জন্য পর্যাপ্ত ডিস্কের জায়গা রয়েছে তা নিশ্চিত করুন :-)


লেজটি আপনাকে কেবল ফাইলটি প্রদর্শন করবে, এড নির্দিষ্ট করেছেন যে তিনি কম ইন্টারেক্টিভভাবে ব্যবহার করছেন (উদাহরণস্বরূপ, তাকে ফাইলটিতে সন্ধান করতে হবে)
মাত্তিও

2>&1POSIX হয়, খালি >&বাশিজম।
ব্যবহারকারীর 6868 15

এফডব্লিউআইডাব্লু, 2> এবং 1 উইন্ডোজ এক্সপি, 7, 2008 ইত্যাদিতেও কাজ করে
জাফতুগা

@ মাত্তিও: হ্যাঁ, less +Fআমার উদাহরণটি ব্যবহার করা উচিত ছিল ; আমি সবেমাত্র আমার উত্তর আপডেট করেছি।
জের্নি

1
@ মাত্তিও: লাইন গণনা একই সমস্যা নয় less +F(যেহেতু less +Fডেটা তৈরি হওয়ার সাথে সাথে প্রক্রিয়া করা হয়)। উদাহরণস্বরূপ আমি দিয়েছিলাম নেই না যেভাবে মূলত পোস্ট একই সমস্যা আছে: Ctrl + C বাধা দেবেন না-হবে process_output। এক 'অনুসরণ' কার্যকারিতার জন্য গ্রাহ্য না করে, এক চালাতে পারেন produce_output > out 2>&1, তবে less out। একটি সমস্যা produce_output | lessহ'ল যদি কোনও কিছু পাইপ ব্রেক করে (যেমন দুর্ঘটনাক্রমে 'কিউ' থেকে আঘাত করা less), তবে produce_outputমারা যাবে (বিশেষ সাইনপাইপ পরিচালনা ছাড়া) without
জের্নি

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