মাউস ছাড়াই কীভাবে আমার ক্লিপবোর্ডে পুরো কমান্ড লাইনটি অনুলিপি করবেন?


20

কল্পনা করুন যে আমার টার্মিনালে আমার এই লাইনটি রয়েছে:

youtube-dl --get-thumbnail --extract-audio --audio-format mp3 https://www.youtube.com/watch?v=

এটি পরীক্ষার পরে, আমি আমার ক্লিপবোর্ডের উপরে এই লাইনটি অনুলিপি করতে এবং এটি কোনও স্ক্রিপ্ট ফাইলে পেস্ট করতে চাই। কমান্ডের আউটপুট নয় । তবে, মাউসটি ব্যবহার না করেই এটি করা হচ্ছে। আমি কেবল কীবোর্ডে আমার হাত রাখতে চাই। আমি মনে করি যে এভাবে কোডিং করার জন্য দ্রুত faster

উত্তর:


22

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

প্রস্তুতি:

প্রথমে প্যাকেজটি ইনস্টল করুন xselযা আপনাকে টার্মিনাল থেকে এক্স ক্লিপবোর্ড অ্যাক্সেস করার অনুমতি দেয়:

sudo apt-get install xsel

কমান্ডের প্রকরণ 1 (সংক্ষিপ্ত):

এর পরে, ক্লিপবোর্ডে পূর্ববর্তী আদেশটি অনুলিপি করতে আপনি নিম্নলিখিত লাইনটি টাইপ করতে পারেন:

xsel -ib <<<!!:q

আপনি যদি দ্বিতীয় সর্বশেষতম কমান্ডটি অনুলিপি করতে চান তবে তৃতীয় সর্বশেষ ব্যবহারের জন্য এবং এর !!সাথে প্রতিস্থাপন করুন।!-2!-3

আপনি কী চালাচ্ছেন তা বোঝাতে, কমান্ডটির একটি ছোট বিরতি এখানে:

  • xselএক্স ক্লিপবোর্ডগুলি অ্যাক্সেস করার জন্য একটি কমান্ড-লাইন সরঞ্জাম।
    আরও তথ্যের জন্য, এটি অনলাইনেম্যানপেজ আইকন বা রান করে ম্যানপেজটি পড়ুন man xsel

    • -iপরামিতি বলে xselstdin থেকে পড়া (সাধারণত এর মানে কীবোর্ড ইনপুট, কিন্তু আমরা এখানে পুনর্নির্দেশ কিছু করতে যাচ্ছেন)
    • -bপ্যারামিটার নির্দিষ্ট করে পরিবর্তে ক্লিপবোর্ড এক্স এর "প্রাথমিক" বা "মাধ্যমিক" নির্বাচনগুলি ব্যবহার করতে।
  • <<<"হিয়ার স্ট্রিং" নামে একটি বিশেষ বাশ সিনট্যাক্স।
    এটি মূলত তার পরে আর্গুমেন্টটি (কেবল একটিই!) প্রসারিত করে এবং কমান্ডের স্ট্যান্ডিনের (স্ট্যান্ডার্ড ইনপুট) স্ট্রিং হিসাবে পুনর্নির্দেশ করে তার আগে / পরে এটি দাঁড়ায়।

  • !!:qব্যাশের ইতিহাস প্রসারের জন্য তাকে "ব্যাং কমান্ড" বলা হয়। এটি আগের কোনও টাইপ করা কমান্ড লাইনের সাথে নিজেকে প্রতিস্থাপন করে।
    আরও তথ্যের জন্য, চালিয়ে এটি স্থানীয় ম্যানপেজটি পড়ুন man history(অনলাইন ম্যানপেজটি সহায়ক নয়)।

    • !!পূর্ববর্তী কমান্ড লাইন ঘোরা এবং জন্য একটি প্রতিশব্দ হয় !-1
      স্পষ্টতই এর !-2অর্থ দ্বিতীয় শেষ কমান্ড লাইন। বিয়োগ চিহ্নটি ভুলে যাবেন না -, অন্যথায় এটি আপনার দ্বারা টাইপ করা দ্বিতীয় (3 য় / ...) কমান্ডটি ফিরিয়ে দেবে।
    • :qমডিফাই ঠুং কমান্ড ব্যাশ বলে একক উদ্ধৃতির মধ্যে প্রতিকল্পন ঘিরা করার জন্য ( ') শেল আরো সম্প্রসারণ প্রতিরোধ।

কমান্ডের প্রকরণ 2 (কিছুটা দীর্ঘ):

echo !!:q | xsel -ib
  • echo টার্মিনালের স্টাডাউটে এর সমস্ত যুক্তি মুদ্রণের সহজ কাজ রয়েছে।

  • !!:qব্যাশের ইতিহাস প্রসারের জন্য তাকে "ব্যাং কমান্ড" বলা হয়। এটি আগের কোনও টাইপ করা কমান্ড লাইনের সাথে নিজেকে প্রতিস্থাপন করে।

    • !!পূর্ববর্তী কমান্ড লাইন ঘোরা এবং জন্য একটি প্রতিশব্দ হয় !-1। স্পষ্টতই এর !-2অর্থ দ্বিতীয় শেষ কমান্ড লাইন। বিয়োগ চিহ্নটি ভুলে যাবেন না -, অন্যথায় এটি আপনার দ্বারা টাইপ করা দ্বিতীয় (3 য় / ...) কমান্ডটি ফিরিয়ে দেবে।
    • :qমডিফাই ঠুং কমান্ড ব্যাশ বলে একক উদ্ধৃতির মধ্যে প্রতিকল্পন ঘিরা করার জন্য ( ') শেল আরো সম্প্রসারণ প্রতিরোধ।
  • |একটি পাইপ এটি কমান্ডের টার্মিনাল আউটপুট ("stdout") এর আগে কমান্ডের টার্মিনাল ইনপুট ("stdin") এর পরে পুনর্নির্দেশ করে।

  • xselএক্স ক্লিপবোর্ডগুলি অ্যাক্সেস করার জন্য একটি কমান্ড-লাইন সরঞ্জাম।
    আরও তথ্যের জন্য, এটি অনলাইনেম্যানপেজ আইকন বা রান করে ম্যানপেজটি পড়ুন man xsel

    • -iপরামিতি বলে xselstdin থেকে পড়া (সাধারণত এর মানে কীবোর্ড ইনপুট, কিন্তু আমরা এখানে পুনর্নির্দেশ কিছু করতে যাচ্ছেন)
    • -bপ্যারামিটার নির্দিষ্ট করে পরিবর্তে ক্লিপবোর্ড এক্স এর "প্রাথমিক" বা "মাধ্যমিক" নির্বাচনগুলি ব্যবহার করতে।

কমান্ডের প্রকরণ 3 (উপনাম):

আপনি প্রায়শই ব্যবহার করেন এমন দীর্ঘ বা জটিল কমান্ডগুলি মনে রাখতে না চাইলে বাশ ওরফে একটি দুর্দান্ত জিনিস। আপনি এই কমান্ডটি একটি সাধারণ উপনাম নামকে বরাদ্দ করতে পারেন, যা একই অর্জনের জন্য আপনি দীর্ঘ কমান্ডের পরিবর্তে চালাতে পারেন।

দুর্ভাগ্যক্রমে, ব্যাং কমান্ডগুলি একটি বিশেষ বাশ বৈশিষ্ট্য এবং এলিয়াসগুলি সমাধানের আগে প্রসারিত হওয়ার কারণে আপনি কেবল উপরের বৈকল্পিকগুলির একটিরও উর্ফ করতে পারবেন না কারণ !!অংশটি কাজ করবে না। যদিও একটি workaround আছে।

উপন্যাসটি সেট করতে আপনার টার্মিনালে নিম্নলিখিত লাইনটি চালান। মনে রাখবেন যে আপনি এর পরিবর্তে কোনও বৈধ বাশ ভেরিয়েবল নাম চয়ন করতে পারেন copylastcommand:

alias copylastcommand='history -p \!\! | xsel -ib'

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

আবার, লাইনটির একটি সংক্ষিপ্ত বিরতি:

  • alias name='command'বাশে একটি উপকরণ সেট করার সিনট্যাক্স। commandযখনই আপনি চালানো চলবে nameএখন থেকে।

  • history -p \!\!পূর্বে সম্পাদিত কমান্ড লাইনটি স্টডআউট (স্ট্যান্ডার্ড আউটপুট) এ আউটপুট দেয়। -pস্যুইচ ব্যতীত , এটি কেবল মুদ্রণ করবে না বরং আবার কমান্ডটি চালাবে।
    দ্রষ্টব্য যে আমাদের !ব্যাকস্ল্যাশগুলি ( ) সহ bangs ( ) \এড়িয়ে চলতে হবে, কারণ অন্যথায় বাশ তাদের প্রসারিত করতে পারে যখন আমরা উপনামটি সেট করার চেষ্টা করব, যা সেটিকে ওরফে যেমন থাকতে হবে তেমন কোনও ধারণা নেই।
    আবার, আপনার কাছে দ্বিতীয় ঠুং প্রতিস্থাপন দ্বারা [এন] -th সাম্প্রতিক কমান্ড নির্দিষ্ট করতে পারেন -n, যেমন \!-2

  • |একটি পাইপ এটি কমান্ডের স্ট্যান্ডার্ড আউটপুট ("stdout") এর আগে কমান্ডের টার্মিনাল স্ট্যান্ডার্ড ("stdin") এর পরে পুনর্নির্দেশ করে।

  • xselএক্স ক্লিপবোর্ডগুলি অ্যাক্সেস করার জন্য একটি কমান্ড-লাইন সরঞ্জাম।
    আরও তথ্যের জন্য, এটি অনলাইনেম্যানপেজ আইকন বা রান করে ম্যানপেজটি পড়ুন man xsel

    • -iপরামিতি বলে xselstdin থেকে পড়া (সাধারণত এর মানে কীবোর্ড ইনপুট, কিন্তু আমরা এখানে পুনর্নির্দেশ কিছু করতে যাচ্ছেন)
    • -bপ্যারামিটার নির্দিষ্ট করে পরিবর্তে ক্লিপবোর্ড এক্স এর "প্রাথমিক" বা "মাধ্যমিক" নির্বাচনগুলি ব্যবহার করতে।

1
উত্তম উত্তর, তবে আপনি কি পাইপ এড়াতে পারবেন? খুব দয়া করে? <<<"!!" xsel -ib
কোস

@ কোস হ্যাঁ, ধন্যবাদ এটি কিছুটা সহজ করে তোলে। <<<কাঠামোটাকে আবার কীভাবে ডাকা হয়েছে তা মনে রাখতে আপনি কি আমার মনকে সহায়তা করতে পারেন ? এবং আমি মনে করি <<<!!:q xsel -ibএটি আরও ভাল (ইতিহাসের কমান্ডটি উদ্ধৃতিটি দেবে), বা আপনি একমত নন?
বাইট কমান্ডার

তবে !!:qএকক উদ্ধৃতি ( ') ব্যবহার করে ...
বাইট কমান্ডার

আপনি ঠিক বলেছেন, ব্যবহার করে সম্প্রসারণ করা হবে <<<"!!" xsel -ib। হ্যাঁ, <<<!!:q xsel -ibভাল, এটি জন্য যান।
কোস

চমৎকার, xselএর আকর্ষণীয় বাক্য গঠন রয়েছে
সের্গেই কোলডিয়াজন্য

5

আপনি ব্যবহার করতে পারেন xclip:

some_command | xclip -selection c

সুতরাং আপনার ক্ষেত্রে:

youtube-dl .... | xclip -selection c

c ক্লিপবোর্ডের জন্য দাঁড়িয়েছে।

আপনার xclipপ্রথমে ইনস্টল করার প্রয়োজন হতে পারে :

sudo apt-get install xclip

সম্পাদনা করুন:

আপনি যদি টাইপ করা কমান্ডটি (আউটপুট নয়) ক্লিপবোর্ডে অনুলিপি করতে চান তবে আপনি এখানে স্ট্রিং ব্যবহার করতে পারেন:

 xclip -selection c <<<"$(echo foobar)"

বা একটি পাইপ:

echo foobar | xclip -selection c

1
আমি এখনও কমান্ড আউটপুট পাই, তবে আমি কেবল লাইনটিই চাই।
ভালটার সিলভা

echo "command" | xclip -selection clipboard... অথবা এটা একটি স্ক্রিপ্ট অধীনে করা~/.bin : echo "$@" | xclip -selection clipboard। বলুন আপনি এটিকে "সিপিপি" হিসাবে সংরক্ষণ করুন, তারপরে আপনি cpy youtube-dl stuffএটি করতে পারবেন এবং এটি কার্যকর না করে ক্লিপবোর্ডে অনুলিপি করা হবে।
অ্যালেক্স

এবং আপনি যদি এটি সম্পাদন করতে চান ... echo "$@" | xclip -selection c && $@, বা আরও কিছু চালাকের সাথে চালাক ...
অ্যালেক্স

@ ভ্যাল্টারহেনরিক দয়া করে আমার সম্পাদনাগুলি পরীক্ষা করুন ..
হিমাইল

3

আমি শুধু জন্য একটু স্ক্রিপ্ট তৈরি zshকরে ব্যবহার xclipএই কাজ করতে:

#!/bin/zsh
export HISTFILE=~/.zsh_history
fc -R
fc -l | tail -n 2 | sed -n '1p' | sed 's/[0-9]*  //' | xclip -selection c

এই স্ক্রিপ্টটি শেল / টার্মিনালে প্রবেশ করা শেষ কমান্ডটি সিস্টেমের ক্লিপবোর্ডে অনুলিপি করে। এটি একটি সাধারণ রিমোট সার্ভারে কাজ করবে না।

আমি ভেবেছিলাম এই স্ক্রিপ্টটি লিখতে আমার কয়েক মিনিট সময় লাগবে, তবে zshইতিহাসের পরিচালনা করার পথে আমি হোঁচট খেয়েছি বলে আশ্চর্যজনকভাবে অনেক সময় লেগেছে ।

tail -n 2এবং প্রথম sedএই সত্য যে এই স্ক্রিপ্টের নিজেই জন্য কমান্ড ইতিহাসে এবং তাই এটি ইতিহাসের দুই লাইন পায় এবং গত এক সরিয়ে ফেলা রেকর্ড করা হচ্ছে সঙ্গে তার আচরণ করছে।

এই স্ক্রিপ্টটি কাজ করে, এবং এটি একটি মজাদার ধাঁধা ছিল, তবে এটি করার কোনও সহজ বা আরও মার্জিত উপায় যদি থাকে তবে আমি সত্যিই আগ্রহী zsh


আচ্ছা আপনি সম্ভবত প্রক্রিয়া সহজ পারে tailএবং sedএকটি এক বা দুই কমান্ড মধ্যে কমান্ড। এই কমান্ডগুলি ব্যবহার করে !!যা এখানে ব্যাখ্যা করা আছে - এটি জেডএসএইচ-এ পাওয়া উচিত ....
উইলফ

ওহ, !!সত্যিই দেখে মনে হচ্ছে এটি এখানে সহায়ক হবে, ধন্যবাদ!
এলেক

0

আমি একটি ক্লিপবোর্ড পরিচালক হিসাবে ব্যবহার করছি, তাই।

alias pbpaste='xclip -i -selection clipboard -o'
alias pbcopy='xclip -selection clipboard'
vimscratch='vim -c 'setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile' 

ক্লিপবোর্ডে শেষ কমান্ড

alias last2cb='fc -ln -1 | pbcopy'

ভিপ স্ক্র্যাচ করতে ক্লিপবোর্ড

alias vcb='pbpaste | vimscratch -'

জেডএসএইচ নির্দিষ্ট

# Copy the most recent command to the clipboard
function _pbcopy_last_command(){
    fc -ln -1 | pbcopy
}
zle -N pbcopy-last-command _pbcopy_last_command
bindkey '^x^y' pbcopy-last-command
# Ctrl-x Ctrl-y  to copy last command to the clipboard


# Edit content of clipboard on vim (scratch buffer)
function _edit_clipboard(){
    pbpaste | vim -c 'setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile' -
}
zle -N edit-clipboard _edit_clipboard
bindkey '^x^v' edit-clipboard
# Ctrl-x Ctrl-v to edit clipboard on vim


# define function that retrieves and runs last command
function run-again {
    # get previous history item
    zle up-history
    # confirm command
    zle accept-line
}
# define run-again widget from function of the same name
zle -N run-again
bindkey '\er' run-again
# alt-r to run last command again

আমি মনে করি এই ধারণাগুলি আপনাকে নিজের সমাধান তৈরি করতে সহায়তা করতে পারে

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