টার্মিনাল - মাউস ব্যবহার না করে সিএলআই থেকে অনুলিপি করুন


20

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

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

মাউস ব্যবহার না করে সিএলআই থেকে অনুলিপি করুন


1
আপনি মাউস ছাড়াই জিনোম ব্যবহার করছেন?
ott--

উত্তর:


11

আপনি ব্যবহার করতে পারেন screen(1) আপনার পছন্দের টার্মিনাল এমুলেটর মধ্যে ( xterm, gnome-terminal, ...)।

আপনার প্রয়োজনীয় কার্যকারিতাটি অন্তর্নির্মিত screen। এটি যেভাবে কাজ করে তার সাথে আপনাকে পরিচিত হতে হবে:

  • ডিফল্টরূপে, "কমান্ড" কী-বাইন্ডিংটি Ctrl+ হয় A, আপনি "কমান্ড" সিকোয়েন্স প্লাস নির্দিষ্ট ক্রিয়া জারি করে কমান্ডগুলি রচনা করেন।
  • "অনুলিপি" কমান্ডটি হ'ল: AltGr+[
  • "আটকান" কমান্ড AltGr+ +]

আপনি কমান্ডটি "অনুলিপি" করতে পারেন এবং অন্য টার্মিনালে "পেস্ট" করতে পারেন।

screen মজাদার এবং একবার আপনি এটি ব্যবহার শুরু করলে আপনি অবাক হয়ে যাবেন কীভাবে এটি সম্ভব হয় আপনি এটি একেবারেই ব্যবহার করছেন না।


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

1
পড়ুন man screen। এছাড়াও, আমি লিখেছি 'বিল্ট-ইন মধ্যে পর্দা', যার অর্থ কপি / পেস্ট কার্যকারিতা উপস্থিত screen নকশা
দাউদ

spaceপছন্দসই অঞ্চল নির্বাচন করতে আপনার কী ব্যবহার করতে হবে। Yপুরো লাইন বা আকাঙ্ক্ষিত অঞ্চল অনুলিপি করতে আপনার প্রয়োজন । পর্দা viআন্দোলন বন্ধুত্বপূর্ণ।
ফেলিকজেড

কী AltGrকী? আমার আছেAlt
আলহালাল

1
screenটুল ফাংশন এখানে ব্যাখ্যা করা হয়েছে না। এবং এটি প্রশ্নের কোনও উত্তর সরবরাহ করে বলে মনে হচ্ছে না।
Luís de Sousa

7

ইতিমধ্যে সরবরাহ করা উত্তরগুলি ছাড়াও, আপনি আরও নমনীয় টার্মিনাল এমুলেটরটিতে যাওয়ার বিষয়ে বিবেচনা করতে পারেন।

আপনি যদি টার্মিনালগুলি আরএক্সভিটি-ইউনিকোডে পরিবর্তন করতে প্রস্তুত হন , আপনি urxvt-perls এর মতো একটি সরঞ্জাম ব্যবহার করতে পারেন : স্ক্রিপ্টগুলির সংগ্রহ যা সেই টার্মিনাল এমুলেটরটিতে নিম্নলিখিত কীবোর্ড কার্যকারিতা সরবরাহ করে:

  • পাঠ্যটি নির্বাচন করুন, অনুলিপি করুন এবং আটকান
  • এগিয়ে এবং অনুসন্ধান বিপরীত
  • আপনার পছন্দসই ব্রাউজারে ইউআরএল হাইলাইট এবং খুলুন

আপনি কেবল প্যাকেজটি ইনস্টল করুন এবং তারপরে আপনার কয়েকটি লাইন যুক্ত করুন এবং তারপরে ~/.Xresourcesআপনি ভালোর জন্য খালিটি প্লাগ করতে পারেন।


4

আপনি একটি প্রোগ্রাম ব্যবহার করে এটি করতে পারেন xclip:

NAME
   xclip - command line interface to X selections (clip‐
   board)

একবার এটি ইনস্টল হয়ে গেলে, আপনি এটি আপনার এক্স ক্লিপবোর্ডের সাথে সংযোগ করতে ব্যবহার করতে পারেন। দুর্ভাগ্যক্রমে, mysqlএটি আপনার পরিবেশে কাজ করবে না (অনুলিপিযুক্ত লাইনের জন্য এটির নিজস্ব বাফার রয়েছে) তবে আপনি যদি 'সাধারণ' কমান্ডটি চালাতে চান তবে তা হবে। উদাহরণ স্বরূপ :

$ This is a long command line

CtrlAলাইনের প্রারম্ভে যেতে টাইপ করুন, উদ্ধৃতিতে কমান্ডটি সংযুক্ত করুন এবং তারপর এটি প্রতিধ্বনি করুন:

$ echo -e "This is a long command line" |xclip 

আপনার মিডল ক্লিক ক্লিপবোর্ডে এখন "এটি একটি দীর্ঘ কমান্ড লাইন" রয়েছে।

আপনি যদি মাউস না ব্যবহার করে পেস্ট করতে চান তবে এটি আপনি কোথায় আটকান তার উপর নির্ভর করবে। আপনি চালিয়ে অন্য টার্মিনালে পেস্ট করতে পারেন:

$ xclip -o

আপনি একই টার্মিনালে পেস্ট করতে পারেন, কেবল কমান্ডটি দিয়ে (কাটা) মেরে CtrlKএবং পরে আটকানো CtrlY

বাশের ইতিহাস ব্যবহার করে আপনি টার্মিনাল জুড়ে কমান্ডগুলিও সংরক্ষণ করতে পারেন। আপনার এই লাইন যুক্ত করুন ~/.bashrc:

PROMPT_COMMAND='history -a; history -r'

PROMPT_COMMANDএকটি বিশেষ বাশ ভেরিয়েবল। যদি এটি সেট করা থাকে তবে নতুন প্রম্পট দেওয়ার আগে কমান্ড হিসাবে মান কার্যকর করা হয়। history -aইতিহাসের ফাইলে বর্তমান সেশনের ইতিহাস লিখবে এবং history -rসেই ফাইলটি পুনরায় লোড করবে। এর অর্থ হল আপনার চালিত প্রতিটি কমান্ড তত্ক্ষণাত ইতিহাসের ফাইলে লেখা হবে।

এখন আপনি যখন একটি দীর্ঘ কমান্ড লাইন চালান, আপনি অন্য টার্মিনালে স্যুইচ করতে পারেন এবং রিটার্নটি হিট করতে পারেন (কেবল চালানোর জন্য $PROMT_COMMAND, বিকল্পভাবে, একটি নতুন টার্মিনাল উইন্ডো খুলুন) এবং এটি এই টার্মিনালের ইতিহাসে অ্যাক্সেসযোগ্য হবে। আপনি যদি এখন আঘাত Upকরেন তবে এটি নতুন টার্মিনালে চালাতে পারেন।


ঠিক আছে, তবে আমাকে এখনও মাউস ব্যবহার করতে হবে?
প্রার্থনা

@ প্রিয়াগআপ আহ, হ্যাঁ, এটি মিডল ক্লিক বাফারে অনুলিপি করবে। অন্য উপায়ের জন্য আপডেট উত্তর দেখুন।
টেরডন

আমার মনে $ xclip -oহয় আমি যা চাই তা নয় কারণ এটি কেবল আমার xclipeডি প্রিন্ট করে । কিন্তু + 1- Ctrl+Aদ্বারা অনুসরণ Ctrl+Kএবং Ctrl+Yএকই টার্মিনাল অন্তত কাটা এবং পেস্ট জন্য।
প্রয়াগাপড

@ প্রিয়াগআপটি হ'ল জিনিসটি হ'ল বিভিন্ন ক্লিপবোর্ড বাফার খেলছে এবং সমাধান আপনি ঠিক কী করতে চান তার উপর নির্ভর করবে। আপনি যা প্রয়োজন তার একটি নির্দিষ্ট উদাহরণ দিয়ে আপনার প্রশ্নটি আপডেট করতে পারেন? আমার অর্থ যেখান থেকে অনুলিপি করা (মাইএসকিএল কৌশলযুক্ত হবে) এবং কোথা থেকে।
টেরডন

1
@ প্রিয়াগআপ আরও একটি কৌতুকের জন্য আপডেট উত্তর দেখুন।
টেরডন

1

@ ইভিলসপ একটি ভাল সমাধানের পরামর্শ দিয়েছেন তবে এটি প্রায়শই ভেঙে যায়।

একটি দ্রুত সমাধান

এখানে এমন একটি সমাধান রয়েছে যা কখনই ভেঙে যায় না

history | tail -2 | head -1 | xclip -selection clipboard

এই কমান্ডটি কেবল চালান এবং এটি যে কমান্ডটি সবেমাত্র ক্লিপবোর্ডে গিয়েছিল তা অনুলিপি করবে।

মূলত, এটি কী করে তা হ'ল এটি আপনার কমান্ডের ইতিহাস মুদ্রণ করে এবং দ্বিতীয় শেষ কমান্ড নেয় এবং এটি আপনার ক্লিপবোর্ডে ফিড করে (শেষ কমান্ডটি এটি নিজেই হয়, সুতরাং এটি দ্বিতীয় শেষ আদেশটি নির্বাচন করে)।

একটি কাস্টম ফাংশন

দ্রুত সমাধানটির বিকাশ, এখানে আমি একটি ছোট ফাংশন লিখেছি যা বেশ স্মার্ট এবং শেষ ব্যবহৃত কমান্ডটি অনুলিপি করবে। আপনি সর্বশেষ-নবম কমান্ডটি অনুলিপি করার জন্য সংখ্যাগত যুক্তিও সরবরাহ করতে পারেন। দ্বিতীয় গত কমান্ড অনুলিপি করার জন্য যেমন প্রদান 2আর্গুমেন্ট হিসাবে

myclipcopy () {

  if [ -z $1 ]
    then  # if no argument was provided then just copy the last used command
    history | tail -2 | head -1 | sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g' | xclip -selection clipboard
    echo 'Anyways, the following command has been copied:'
    history | tail -2 | head -1| sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g'

  else
    myindex=$(( $1+1 ))
    history | tail -$myindex | head -1 | sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g' | xclip -selection clipboard
    echo "The following command has been copied:"
    history | tail -$myindex | head -1 | sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g'
  fi

  #Delete this command itself from the history
  myhisnum=$(history | tail -1 | grep -oP '\s\d+\s' | grep -oP '\d+'); history -d $myhisnum
}

আপনার ~/.bashrcফাইলটিতে উপরের ফাংশনটি অনুলিপি করুন। মনে রাখবেন যে আপনি যদি এটি আলাদা বাশ স্ক্রিপ্ট ফাইলটিতে রাখেন এবং স্ক্রিপ্টটি চালান, তবে ইতিহাস কমান্ড সে ক্ষেত্রে আপনার ইতিহাস অ্যাক্সেস করতে সক্ষম হবে না বলে এটি কাজ করবে না।

শেষ অবধি, এটি চালান:

myclipcopy 3
# This copies the third-last command

তদুপরি, এই ফাংশনটিতে যুক্ত করা একটি দুর্দান্ত বৈশিষ্ট্য হ'ল এটি চালানোর পরে ইতিহাস থেকে নিজেকে মুছে ফেলে। এটি সহায়ক কারণ কমান্ডগুলির "পশ্চাদপসরণ" সূচকটি পরিবর্তিত হয় না।


এটি দৃust় নয় ।
মাইক্রজারভ 21

@ মিমকিজার: আমি এখন এটির নাম পরিবর্তন করে "কাস্টম ফাংশন" রেখেছি। তবে কেন আপনি এটিকে নিম্নচাপ করলেন? আপনি কি লক্ষ্য করেন না যে এটি সঠিকভাবে প্রশ্নের উত্তর দিয়েছে? তদুপরি, আমি কেন "শক্ত" বললাম কারণ এটি আসলে কখনই ভাঙেনি। ডাউনভোট করে আপনি পোস্ট থেকে একটি উপযুক্ত উত্তর লুকিয়ে রাখছেন।
শিবামস

আমি হ্রাস পেয়েছি কারণ আপনি অনেকটা ধরে নিয়েছেন : বিশেষত বাশ এবং লিনাক্স, যার মধ্যে কোনওটিতেই সুনির্দিষ্ট নয়। এছাড়াও, আপনার পাইপলাইনটি হাস্যকরভাবে
অত্যধিক জটিলভাবে জড়িত

@ মিমকিজার: মন্তব্যের জন্য ধন্যবাদ আশা করি এটি আমাকে আরও ভাল উত্তর তৈরি করতে সহায়তা করবে। আমি গ্রহণ করব যে আমার রেজেক্স এবং পাইপলাইনগুলি কুৎসিত। তবে তারা ভালভাবে পরীক্ষিত এবং আমি এটি ব্যবহার করে যাচ্ছি। এবং অনুমান হিসাবে, আপনি কি লক্ষ্য করেছেন যে সর্বাধিক রেট দেওয়া উত্তরটি ব্যবহারকারী যে অনুমানটি ব্যবহার করছেন তা গ্রহণ করেছে screen। দ্বিতীয় সর্বোচ্চ রেটযুক্ত উত্তরটিও ধরে নিয়েছিল bashএবং linux। অধিকন্তু, ধরে bashনেওয়া কোনও বড় বিষয় নয় কারণ স্ক্রিপ্টটি এখনও zsh বা বেশিরভাগ অন্যান্য শেলগুলির সন্ধানে কাজ করবে।
শিভামস

আমি এটি কুৎসিত বলেছিলাম না - আমি বলেছিলাম এটি অত্যধিক জটিল। এবং না, এটি বেশিরভাগ অন্যান্য শেলগুলিতে কাজ করে না । এবং আরও কি, প্রশ্নে চিত্রিত সিএলআই হ'ল মাই এসকিউএল। অন্যান্য উত্তর সম্পর্কে ভাল পয়েন্ট, যদিও।
মাইকসার্ভ

0

এই কমান্ডটি বাশের ইতিহাস প্রসারণ (তাই) ব্যবহার করে !! আপনি টার্মিনালে টাইপ করা শেষ লাইনে প্রসারিত হবে)। আপনি সম্ভবত ইনস্টল করতে হবে xclipবা হয় xsel

echo "!!" | xclip -selection clipboard

echo "!!" | xsel -i --clipboard

এটি আপনার শেষ কমান্ডটি Ctrl+ এ দেবেv ক্লিপবোর্ড, তাই যদি আপনি কোন গুই প্রোগ্রামে পেস্ট করতে সক্ষম হবে (অথবা সঙ্গে Ctrl+ + Shift+ + vসবচেয়ে টার্মিনাল emulators, বা সঙ্গে "+pতেজ মধ্যে)।

এটি ডাবল উদ্ধৃতি সম্বলিত কিছু লাইনের জন্য বিরতি ফেলবে, উদাহরণস্বরূপ:

$ echo "foo;bar"
foo;bar
$ echo "!!"
echo "echo "foo;bar""
echo foo
The program 'bar' is currently not installed. You can install it by typing:
sudo apt-get install bar

এটি উদাহরণ হিসাবে আপনি যে আদেশ দিয়েছেন তার পক্ষে কাজ করবে; আপনার যদি কেবলমাত্র ডাবল-কোটসগুলি অব্যাহতিপ্রাপ্ত হয় ; & && | ||এবং সমস্যা হয়।


এই উত্তরের জন্য ধন্যবাদ, আমি এটি অবিলম্বে প্রয়োগ করতে পারি এমন সবচেয়ে কার্যকর সমাধান। এবং আমি বিশ্বাস করি যে "এর সাথে সমস্যাগুলি এড়াতে পারবেন কেবলমাত্র !! উদ্ধৃত না করেই, কেবল করুন echo !!এবং এটি নির্বিঘ্নে কাজ করবে (আপনার পূর্ববর্তী কমান্ডটি যে অসম্ভাব্য ক্ষেত্রে শুরু হয়েছিল -nবা -eএটি echoনিজে নেওয়া অন্যান্য কয়েকটি বিকল্প ছাড়া) except
21:44

0

সম্ভবত সবচেয়ে সুবিধাজনক সমাধান না হলেও আমি এটি ব্যবহার করি এবং তাই এটি অন্যদের জন্য আরও সহায়ক হতে পারে এটির জন্য কোনও অতিরিক্ত নরম ইনস্টলেশন প্রয়োজন হয় না।

  1. আপনার যে কোনও সুবিধাজনক ডিরেক্টরিতে একটি অস্থায়ী ফাইল তৈরি করতে হবে

  2. প্রয়োজনীয় দিকনির্দেশ বা পাঠ্যটি সেই ফাইলে স্থানান্তর করুন। দিকনির্দেশের জন্য আপনি ব্যবহার করতে পারেন

    echo $(pwd) 1> tempo
    
  3. ফাইলটি ব্যবহারের আদেশ থেকে দিকনির্দেশ পেতে

    cd $(tail -n 1 tempo)
    

অনুলিপি অনুলিপি এবং আটকানোর জন্য এই সিস্টেমটি অবশ্যই কাজ করবে। আশা করি যে সহায়ক ছিল


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