স্ক্রিনের শীর্ষ লাইনে বাশ ইনপুট রাখুন


12

আমি bashস্ক্রিনের শীর্ষে কমান্ড প্রম্পট ইনপুট রাখতে চাই যাতে পুরানো কমান্ডগুলির আউটপুটগুলি আপ না করে নীচের দিকে ঠেলা যায়।

আমি কীভাবে এটি অর্জন করতে পারি?


6
সুতরাং, আপনি যদি catএকটি ফাইল, এটি বিপরীত ক্রম হবে?
বিশৃঙ্খলা

না, তবে আমি চাইছি আউটপুটটির অংশগুলি নীচের দিকে ঠেলে দেওয়া হোক
টম প্রাইস

1
bashএটি করতে পারবেন না, কারণ bashএমনকি পর্দার অবস্থানগুলি সম্পর্কেও জানেন না: এটি কেবল একটি আউটপুট ফাইলে লেখেন। আপনার একটি টার্মিনাল এমুলেটর প্রয়োজন bashযা কার্সারটি পুনরায় সেট করতে হবে এবং কখন উইন্ডোটি স্ক্রোল করবেন তা জানতে ক্রিয়াকলাপের প্রম্পট সম্পর্কে জানে ।
চিপনার

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

উত্তর:


7

আপনার এই লাইনগুলি যুক্ত করুন .bashrc:

prompt_on_top() {
  tput cup 0 0
  tput el
  tput el1
}

pre_cmd() {
  if [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] || [ -n "$COMP_LINE" ]; then
    return
  fi
  printf "\33[2J"
}

PROMPT_COMMAND="prompt_on_top"
trap 'pre_cmd' DEBUG

bashআছে PROMPT_COMMAND , যা কমান্ড রাখা সামনে মৃত্যুদন্ড কার্যকর করা হবে bashপ্রদর্শনী প্রম্পট। এখানে আমরা এটি ফাংশনে সেট করেছি prompt_on_top, যা স্ক্রিনের শীর্ষে কার্সার সেট করতে টিপুট ব্যবহার করে ।

bashএছাড়াও, কোনো কমান্ড নির্বাহ ব্যবহার করার পূর্বে কমান্ড নির্বাহ করার জন্য একটি উপায় আছে ফাঁদ হ্যান্ডেল সংকেত DEBUG। এখানে আমরা এটি ফাংশনে সেট করেছি pre_cmd, যা পুরাতন স্ক্রিন সাফ করবে, এবং যদি আমরা সমাপ্তি ( COMP_LINE খালি নয়) বা ইন-কমান্ড চালাও তবে কিছুই না করে BASH_PROMPT


এই পদ্ধতির একটি সীমাবদ্ধতা আছে, যদি কমান্ড আউটপুট কোনও স্ক্রিনে খুব দীর্ঘ হয় তবে আউটপুটটি prompt_on_topক্রিয়া দ্বারা ওভাররাইড হবে । এই ক্ষেত্রে, পুরো আউটপুটটি পড়তে আপনাকে পেজারে আউটপুটটি পাইপ করা দরকার।


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

এখানে ওয়েব অনুসন্ধানের মাধ্যমে যারা আসছেন তাদের পক্ষে এই কোডটি github.com/swirepe/alwaysontop এছাড়াও "আপনার বাশ প্রম্পটটিকে স্ক্রিনের শীর্ষে রাখবে", এবং আরও কয়েকটি ফাংশন। যদিও মূল প্রশ্নের উত্তর দেয় না: পুরানো কমান্ড আউটপুটগুলি কিউংএলএম কোড হিসাবে মুছে ফেলা হয়।
উইলসি

এই সমাধানের অন্য একটি অপূর্ণতা হ'ল শেষ আদেশটি কী কার্যকর করা হয়েছিল সে সম্পর্কে আপনার মতামত নেই। এটি হ'ল বিষয়বস্তু cat fileপ্রদর্শন করবে file, তবে আপনি কার্যকর আদেশের একটি তাত্ক্ষণিক প্রতিক্রিয়া পাবেন না। আদর্শভাবে প্রম্পটটি এক্সিকিউটেড কমান্ডের একটি অ-প্রসারিত + প্রসারিত সংস্করণের সাথে অনুসরণ করা হবে এবং তারপরে std আউটপুট অনুসরণ করা হবে।
সাইকোস্লেভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.