মাউস ব্যবহার না করে কীভাবে দ্রুত টার্মিনালে পূর্ববর্তী লাইন আউটপুট পাবেন?


13

লিনাক্স (যেমন উবুন্টু) টার্মিনাল, শেষ লাইন পাওয়ার কোনও পদ্ধতি আছে? বলুন আমি এলোমেলোভাবে একটি tdকমান্ড টাইপ করছি , যা আমার সিস্টেমে ইনস্টল করা হয়নি, তাই আমি নীচের মতো একটি বার্তা পাব। আমি sudo apt-get install textdrawদ্রুত চালানোর জন্য একটি "শর্টকাট" রাখতে চাই ।

এমন কোনও সরঞ্জাম আছে বা কীভাবে আমি মাউসটি ব্যবহার না করে ক্লিপবোর্ডে শেষ লাইনটি অনুলিপি করব?

username@WorkStation:~$ td
The program 'td' is currently not installed. You can install it by typing:
sudo apt-get install textdraw
username@WorkStation:~$

উপরের তীর টিপুন? আপনি কি চেষ্টা করেছেন? লিনাক্সে ইতিহাস কমান্ডটিও দেখুন, এটি আপনার পক্ষেও কার্যকর হতে পারে।
রিচি086

টার্মিনাল মাল্টিপ্লেজার প্রোগ্রাম, টিএমউক্স এবং স্ক্রিন, ক্লিপবোর্ডে গেটিটং পাঠ্যের সক্ষমতা সরবরাহ করে। তবে উবুন্টুর ডিফল্ট জিইউআইতে আরও সহজ উপায় থাকতে পারে, তাই আমি সন্দেহ করি যে এর চেয়ে সহজ উত্তর পাওয়া যাবে। PgUp, Shift-PgUp বা Ctrl-PgUp টিপলে স্ক্রোলব্যাকের অনুমতি দেওয়া হতে পারে।
তোগাম

3
@ Richie086 দয়া করে নোট করুন, আমি কি প্রয়োজন sudo apt-get install textdraw, না td। আপ তীর কেবল আমাকে দিবেtd
ড্যানিয়েল

উত্তর:


6

আপনি একটি সামান্য অশ্লীলতা কিছু মনে না করেন (আমি না), আপনি ব্যবহার করতে চাইতে পারেন যৌনসঙ্গম , যে করে আপনি ঠিক যা জিজ্ঞাসা একটি হাতিয়ার।

ঠিক আছে, ঠিক নয়, তবে এটি একই সমস্যা সমাধান করে। কেবল সর্বশেষতম লাইনটি পাওয়ার পরিবর্তে এটি আপনার টাইপ করা সর্বশেষ আদেশটি মেলাতে চেষ্টা করে।

ফাক পূর্ববর্তী কমান্ডের সাথে একটি নিয়মের সাথে মেলে চেষ্টা করে, ম্যাচ করা নিয়ম ব্যবহার করে একটি নতুন কমান্ড তৈরি করে এবং এটি চালায়।

ভান্ডারগুলিতে প্রদর্শিত উদাহরণগুলি আপনাকে উল্লিখিত বেশ কয়েকটি পরিস্থিতিতে প্রদর্শন করে।

এখানে চিত্র বর্ণনা লিখুন


2

সংক্ষিপ্ত উত্তর: না, সম্ভবত এটি করার জন্য আপনার কাছে কোনও উপলভ্য পদ্ধতি নেই।

দীর্ঘ উত্তর:

  • যদিও কোনও টার্মিনাল এমুলেটর থাকা সম্ভব যা আপনাকে স্ক্রিনের বিষয়বস্তুগুলি "ঠিক" পড়তে এবং সেগুলি সম্পাদনা করার অনুমতি দেয়, বাস্তবে এমন কিছু করা হয় না যে উদ্বেগের কারণে কিছু অযাচিত প্রোগ্রাম আপনার কীবোর্ডের এন্ট্রিগুলিতে ঝাঁপিয়ে পড়তে পারে।
  • একটি শেল আপনার কমান্ডের আউটপুট ক্যাপচার ডিজাইন করা যেতে পারে এবং আপনাকে এটি সম্পাদনা করার অনুমতি দেয় (ঠিক আপনার কমান্ডের ইতিহাসের মতো)। কমান্ডটি এমন কিছু হলে এটি জটিল হয়ে উঠবে vi(যেখানে আউটপুটটি ভাল লাইন-ভিত্তিক পাঠ্য নয়)। বাশ যেভাবেই তা করে না।

বাস্তবে, লোকেরা এই সীমাবদ্ধতার আশেপাশে কাজ করার জন্য হ'ল কমান্ড-আউটপুট ক্যাপচার করার জন্য অন্যান্য প্রোগ্রামগুলি ব্যবহার করে সেটি সম্পাদনা করে। তবে এটি আপনার তাত্ক্ষণিক সমস্যার সমাধান করবে না।

উদাহরণস্বরূপ, আমি অ্যাডহক শেল কমান্ড জারি করতে vi-like-emacs ব্যবহার করি । যদি তাদের আরও ইনপুটের প্রয়োজন না হয় তবে এটি উইন্ডোতে চালানো , কমান্ডের আউটপুট ক্যাপচার করা - এবং কমান্ডটি পরিমার্জন করার জন্য আউটপুট সম্পাদনা করতে ভাল কাজ করে। ইম্যাকস আপনাকে ভিএম এর মতো কিছু করার অনুমতি দেয়।


2

বাশ থেকে কোনও অ-বিদ্যমান কমান্ড চালনার পরে যদি আপনি ওবুন্টুতে এই বার্তাটি পেয়ে থাকেন তবে আপনার সিস্টেম সম্ভবত command_not_found_handleফাংশন ব্যবহার করছে । আপনি এটি দেখতে পারেন /etc/bash.bashrc

তুচ্ছ হ্যাকিংয়ের বিকল্প হতে পারে: আমি সবেমাত্র একটি স্ক্রিপ্ট তৈরি করেছি cnfh:

#!/bin/bash

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-not-found ]; then
        function command_not_found_handle {
                # check because c-n-f could've been removed in the meantime
                if [ -x /usr/lib/command-not-found ]; then
                   /usr/lib/command-not-found -- "$1"
                   return $?
                elif [ -x /usr/share/command-not-found/command-not-found ]; then
                   /usr/share/command-not-found/command-not-found -- "$1"
                   return $?
                else
                   printf "%s: command not found\n" "$1" >&2
                   return 127
                fi
        }
fi


"$@"
RET_VAL=$?
if [ $RET_VAL -eq 127 ]; then
  OUT=$(command_not_found_handle "$@" 2>&1)
  $(echo $OUT |sed -n 's/.*\(apt-get install .\+\)$/\1/p')
fi

তারপরে এই স্ক্রিপ্টটি ব্যবহার করে টিডি কমান্ড চালান:

# ./cnfh td

উবুন্টু 14.04.2 এলটিএস ব্যবহার করে । আমি আশা করি এটি সাহায্য করবে.


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

2

Tmux v2.4 এবং অগ্রে (যেহেতু এই কমিট https://github.com/tmux/tmux/commit/76d6d3641f271be1756e41494960d96714e7ee58 ) সঙ্গে send-keys -X। এটি পুরানো সংস্করণগুলিতে আলাদা সিনট্যাক্স সহ সম্ভব হতে পারে।

ইন .tmux.conf:

bind ! copy-mode \;\
       send-keys -X cursor-up \;\
       send-keys -X select-line \;\
       send-keys -X cursor-left \;\
       send-keys -X copy-selection-and-cancel \;\
       paste-buffer

এখন, prefix+!বর্তমান কার্সার অবস্থানে সর্বশেষ লাইনটি অনুলিপি করবে।

cursor-left আপনি যদি রিটার্ন টাইপ না করে সরাসরি এটি সম্পাদন করতে চান তবে ছেড়ে যেতে পারেন।

দ্রষ্টব্য : শেষ লাইনটি খালি থাকলে বা এটি আবৃত থাকলে এটি কাজ করবে না তবে এটি বেশিরভাগ ক্ষেত্রে কার্যকর


1

অতি সাম্প্রতিক কমান্ড থেকে আউটপুটটির শেষ লাইনটি কার্যকর করতে, আপনি যদি সেই আদেশটি পুনরায় কার্যকর করতে ইচ্ছুক হন (যেহেতু এটি ডায়াগনস্টিক বার্তা ইস্যু করা ছাড়া কিছুই করে না)

$($(fc -ln -1) | tail -n 1)

ধাপে ধাপে (স্তর দ্বারা স্তর):

  • fc (যা "ফিক্স কমান্ড" এর পক্ষে দাঁড়াতে পারে) হ'ল কমান্ডের ইতিহাসে অ্যাক্সেসের জন্য শেল বিল্টিন কমান্ড।

    • -ln
      • l(লোয়ার কেস এল) - l পূর্ববর্তী কমান্ড (গুলি)
      • n- কমান্ড এন উম্বার অন্তর্ভুক্ত করবেন না
    • 1 (এক) - সাম্প্রতিকতম আদেশটি বোঝায়

    fc -ln -1 সর্বাধিক সাম্প্রতিক কমান্ড তালিকাভুক্ত করে, কমান্ড নম্বর সহ নয়।

  • $(fc -ln -1) executes সাম্প্রতিকতম কমান্ড।
  • $(fc -ln -1) | tail -n 1সর্বাধিক সাম্প্রতিক কমান্ড কার্যকর করে এবং তার আউটপুটটির শেষ লাইনটি প্রদর্শন করে। sudo apt-get install textdrawআপনার উদাহরণে এটি লাইন।
  • $($(fc -ln -1) | tail -n 1)executes যে কমান্ড।

আপনি এটির নাম রাখতে পারেন:

alias execute_last_line_of_output_from_previous_command='$($(fc -ln -1) | tail -n 1)'

উপনামটির জন্য একটি ছোট নাম চয়ন করার জন্য আমি এটি আপনার কাছে রেখেছি।

মন্তব্য:

  • শুধুমাত্র সহজ কমান্ড জন্য এই কাজ - মত আর বিশেষ অক্ষর |, <, >, ;, &, অথবা এমনকি কোট। যদি আপনার জটিল কমান্ডগুলি পরিচালনা করতে হয় তবে আপনি সম্ভবত এটি যুক্ত করে এটি করতে পারেন eval, তবে এটি ব্যাপকভাবে প্রস্তাবিত নয়।
  • আপনার যদি আউটপুটটির শেষ লাইন (যেমন সতেরো থেকে শেষের শেষ লাইন) ব্যতীত অন্য কোনও কিছু অ্যাক্সেসের প্রয়োজন হয় তবে আপনি কিছু লাইন করতে পারেন tail -n 17 | head -n 1
  • আপনার যদি সাম্প্রতিক কমান্ড ব্যতীত অন্য কোনও কিছু অ্যাক্সেসের প্রয়োজন হয় তবে আপনি আর্গুমেন্টগুলিতে পরিবর্তন করতে পারেন fc। নোট যে fc -ln -1সংক্ষিপ্ত fc -ln -1 -1। তৃতীয় সাম্প্রতিক কমান্ডটি পুনরুদ্ধার করতে, ব্যবহার করুন fc -ln -3 -3
  • যদি আপনার উপরের মতো নমনীয়তা প্রয়োজন হয় তবে আপনার সম্ভবত একটি শেল ফাংশন লেখা উচিত যা একটি উপাধিকারের চেয়ে আর্গুমেন্ট গ্রহণ করবে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.