আমি কীভাবে ব্যাশটিতে একটি অঙ্কের পুনরাবৃত্তিগুলি ইনপুট করব input


20

আমি কমান্ডটি চালাতে চাই

foo --bar=baz <16 zeroes>

আমি কীভাবে 16 টি শূন্যকে দক্ষতার সাথে টাইপ করব? আমি ধরে রাখলে Altএবং টিপলে 1 6 0এটি পরবর্তী জিনিসটি 160 বার পুনরাবৃত্তি করবে, যা আমি চাই না। ইমাসে আমি হয় Alt-[number]বা ব্যবহার করতে পারি Ctrl-u 1 6 Ctrl-u 0, তবে ব্যাশে Ctrl-uবর্তমানে টাইপ করা লাইনটি মেরে ফেলে এবং পরের শূন্যটি কেবল একটি লাইনে 0 যুক্ত করে।

যদি আমি করি

foo --bar=baz $(printf '0%.0s' {1..16})

তারপরে historyউপরেরটি ঠিক দেখায়, এবং না foo --bar=baz 0000000000000000; অর্থাত্ বাশ আমার মতো আচরণ করে না। ( সম্পাদনা করুন : বিন্দু সত্তা, আমি $(...)কমান্ড প্রতিস্থাপন ব্যবহার না করে কিছু শূন্যের ইনপুট দিতে চাই )

(*) আমি অনুমান করি যে "দক্ষতার সাথে" এর একটি প্রযুক্তিগত সংজ্ঞা হ'ল "ও (লগ এন) কীস্ট্রোক সহ", বেশিরভাগ সংখ্যক কীস্ট্রোক সংখ্যার সংখ্যার সমান 16 (সমস্ত মানের জন্য 16) এবং সম্ভবত একটি ধ্রুবক; ইম্যাক্স উদাহরণটি এই সংজ্ঞা দ্বারা দক্ষ হিসাবে যোগ্যতা অর্জন করে।


1
সাউন্ড আপনি শুধু একরকম থেকে ব্যাশ চান পছন্দ know what you want to do। একটি জটিল নেস্টেড কমান্ডে বাশ কীভাবে জানতে পারে যে আপনি কমান্ডের বিপরীতে ইতিহাসে ফাঁসির ফলাফল দেখতে চেয়েছিলেন? ভেরিয়েবল সম্পর্কে কি? সংক্ষেপে বাশ সবসময় codeইতিহাসে থাকে, কোড কার্যকর করার ফলাফল নয়।
অবিশ্বাসী

@ মিউহ, Altনিজেই কোনও চরিত্র প্রেরণ করে না, সুতরাং Alt চাপতে এবং ছেড়ে দেওয়ার সাথে সম্পর্কিত যতটা প্রভাব ফেলবে তেমন কোনও প্রভাব ফেলবে না bash
স্টাফেন চেজেলাস

1
@ অবিশ্বাসীরা আমার অর্থটি করুন এবং এটি ঠিক আছে
বিড়াল

@ অবিশ্বাসী: আমার সম্পাদনা দেখুন see অনুচ্ছেদের মূল বিষয়টি historyহ'ল আমি কমান্ড প্রতিস্থাপন ব্যবহার না করে অঙ্কগুলি ইনপুট করতে চাই।
জোনাস কুলকার

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

উত্তর:


25

চেষ্টা

প্রতিধ্বনি Alt+1Alt+6Ctrl+V0

এই 16 টি শূন্য সন্নিবেশ করানোর জন্য এটি 6 কী স্ট্রোক (কমপক্ষে মার্কিন / যুক্তরাজ্যের কিউয়ার্টি কিবোর্ড ধরে নেওয়া) (আপনি Alt1 এবং 6 উভয়ের জন্য ধরে রাখতে পারেন )।

আপনি স্ট্যান্ডার্ড viমোড ( set -o vi) এবং টাইপও করতে পারেন:

প্রতিধ্বনি 0 Escx16p

(এছাড়াও 6 কী স্ট্রোক)।

emacsমোড সমতুল্য এবং যে একটি একক অক্ষর চেয়ে বেশি পুনরাবৃত্তি ব্যবহার করা যেতে পারে ( ) কাজ করে , কিন্তু না এ ।echo 0Ctrl+WAlt+1Alt+6Ctrl+Yzshbash

সেগুলিও zsh(এবং tcshযেখান থেকে আসে) এর সাথেও কাজ করবে । এর সাথে zsh, আপনি প্যাডিং ভেরিয়েবল এক্সপেনশন ফ্ল্যাগগুলি ব্যবহার করতে পারেন এবং সেগুলি দিয়ে এগুলি প্রসারিত করতে পারেন Tab:

প্রতিধ্বনি $ {(l: 16 :: 0 :)}Tab

(স্পষ্টতই আরও অনেক কী-স্ট্রোক)।

সহ bash, আপনি এর সাথে bashআপনার প্রসারিতও করতে পারেন । যদিও লক্ষ করুন যে এটি লাইনে সমস্ত কিছু (যদিও গ্লোব নয়) প্রসারিত করবে।$(printf '0%.0s' {1..16})Ctrl+Alt+E

সর্বনিম্ন সংখ্যক কী স্ট্রোকের গেমটি খেলতে, আপনি এমন কয়েকটি কী উইজেটকে আবদ্ধ করতে পারেন যা বারবার প্রসারিত <some-number>Xহয় । এবং বেস আরও 36 এটি আরও কমাতে।X<some-number><some-number>

সঙ্গে zsh(বাধ্য F8):

repeat-string() {
  REPLY=
  repeat $1 REPLY+=$2
}
expand-repeat() {
  emulate -L zsh
  set -o rematchpcre
  local match mbegin mend MATCH MBEGIN MEND REPLY
  if [[ $LBUFFER =~ '^(.*?)([[:alnum:]]+)(.)$' ]]; then
    repeat-string $((36#$match[2])) $match[3]
    LBUFFER=$match[1]$REPLY
  else
    return 1
  fi
}
zle -N expand-repeat
bindkey "$terminfo[kf8]" expand-repeat

তারপরে, 16 জিরোর জন্য, আপনি টাইপ করুন:

প্রতিধ্বনি g0F8

(3 কীস্ট্রোকগুলি) যেখানে gহয় 16বেস 36।

এখন আমরা এটিকে আরও একটি কীতে কমাতে পারি যা সেই 16 জিরো সন্নিবেশ করে, যদিও এটি প্রতারণামূলক হবে। আমরা F2দুটি 0গুলি (বা দুটি $STRING, 0 ডিফল্টরূপে), F33 0টি, F1F616 0টি ... 19 অবধি বেঁধে রাখতে পারি ... যখন আপনি স্বেচ্ছাসেবী উইজেটগুলি সংজ্ঞায়িত করতে পারেন তখন সম্ভাবনাগুলি সীমাহীন।

সম্ভবত আমার উল্লেখ করা উচিত যে আপনি 0কীটি টিপলে ধরে রাখলে কেবল একটি কীস্ট্রোক দিয়ে আপনি যতগুলি শিরোনাম চান তা সন্নিবেশ করতে পারেন :-)


viএবং অন্যদের জন্য একাধিক প্রকারের জন্য ধন্যবাদ !
মার্ক স্টুয়ার্ট

9

অনুমান করে আপনার টার্মিনাল এমুলেটর কীস্ট্রোকটি খায় না (উদাহরণস্বরূপ, ট্যাবগুলি স্যুইচ করতে) - প্লেন এক্সটার্ম কাজ করে - আপনি টিপতে পারেন Alt-1 6 Ctrl-V 0। সংখ্যাটি এবং চরিত্রটি পুনরায় ভাঙতে কন্ট্রোল-ভি প্রয়োজন হয় (যদি আপনি কোনও চিঠি পুনরাবৃত্তি করছিলেন তবে আপনার প্রয়োজন হবে না)।

(এটি একটি রিডলাইন বৈশিষ্ট্য হিসাবে পরিচিত digit-argument, তাই আপনার bindজড়িত সংশোধক কীগুলি পরিবর্তন করতে সক্ষম হওয়া উচিত )


1
ধন্যবাদ, বৈশিষ্ট্যটির নাম সহ যখন আমার মত লোকেরা এই প্রশ্নগুলিতে হোঁচট খায় তখন তা কার্যকর হয়। আরও কিছু পড়ার জন্য সম্পর্কিত লিঙ্কগুলি: এসও প্রশ্ন এবং বাশ ম্যানুয়াল
10-10

4

ইমাসে, আমি সাধারণত C-qডিজিট ইনপুট থেকে উপসর্গ যুক্তি আলাদা করতে ব্যবহার করব ।

XON / XOFF প্রবাহ নিয়ন্ত্রণে সমস্যা এড়াতে বাশ Ctrl+vপরিবর্তে ব্যবহার করে C-q

সুতরাং আপনি ব্যবহার করতে পারেন Alt+1 Alt+6 Ctrl+v 0


3

অন্য বিকল্পটি হ'ল চারটি শূন্য টাইপ করুন এবং তারপরে মাউসটিকে আরও তিনবার অনুলিপি করে আটকে দিন। নির্বাচন করতে ডাবল-ক্লিক করুন, পেস্ট করতে মাঝারি ক্লিক করুন 3


বা গল্ফ এটি / একটি শূন্য টাইপ করে আরও কিছু ঠকানো , নির্বাচন করুন এবং 2 পেতে পেস্ট করুন; 4 পেতে এটি নির্বাচন করুন এবং পেস্ট করুন; 8 এ নির্বাচন করুন এবং 16 এর জন্য আবার পেস্ট করুন It's এটি শক্তিশালী :)
জেফ

হ্যাঁ, তবে 4 টি শূন্য টাইপ করা এবং সেগুলি পুনরায় পেস্ট করা আমার কাছে পেওফের তুলনায় প্রচেষ্টার অনুকূল স্তর বলে মনে হয়। এই সমস্ত অতিরিক্ত অনুলিপি এবং আটকানো কাজের মতো মনে হয়।
কাশ

3

ম্যাক্রোগুলির সাথে বাজানো:

ফাংশন কীটি F8দুটি শেষ শব্দটি (পূর্ববর্তী স্থান পর্যন্ত) দিয়ে গুণতে করতে (F8 কী কোডটি ব্যবহার করে পাওয়া গেছে Ctrl-V F8):

$ bind '"\e[19~": "\C-w\C-y\C-y"'

এটি একই পাঠ্য পাঠিয়ে স্থায়ী করা যেতে পারে ~/.inputrc

$ echo '"\e[19~": "\C-w\C-y\C-y"' >> ~/.inputrc

তারপরে টাইপ করুন:

প্রতিধ্বনি 0F8F8F8F8

শূন্যের 2 ^ 4 বার পেতে (এখনও 5 টি কিস্ট্রোক)।

বা টাইপ করুন:

প্রতিধ্বনি বইF8F8F8

2 ^ 3 বইয়ের শব্দ পেতে।

এখনও দ্রুত:

4 দ্বারা গুণ করুন:

$ bind '"\e[19~": "\C-w\C-y\C-y\C-w\C-y\C-y"'

প্রতিধ্বনি 0F8F8

3 কিপ্রেস।

8 দ্বারা গুণন করুন (ফাংশন কী হিসাবে একই সংখ্যা)

$ bind '"\e[19~": "\C-w\C-y\C-y\C-w\C-y\C-y\C-w\C-y\C-y"'

প্রতিধ্বনি 00F8

এখনও 3 টি কিপ্রেস।

প্রতারণা?

16 দ্বারা গুণ করে ঠকাই।

$ bind '"\e[19~": "\C-w\C-y\C-y\C-w\C-y\C-y\C-w\C-y\C-y\C-w\C-y\C-y"'

প্রতিধ্বনি 0F8

কেবল 2 টি কীপ্রেস। (এবং এখনও একটি দরকারী সাধারণ ফাংশন)

^^^^^^^^^^^^^^^^ (বেস 36? হাহ!) :- পি

সাধারণ প্রতারণা:

$ bind '"\e[19~": "0000000000000000"'

প্রতিধ্বনি F8

মাত্র 1 (হ্যাঁ: এক ) কীস্ট্রোক।



এর জন্য বাধ্যতামূলক পরিবর্তন করা হচ্ছে ctrl+U:

এটি পাঠান ~/.inputrc:

echo '"\C-u": universal-argument >> ~/.inputrc

~/.inputrcফাইলটি পুনরায় পড়ুন :

ctrl+Xctrl+R

এটি ইম্যাক্সে যথারীতি করুন (আপনি যেমন চান):

foo --bar = baz ctrl+U16 ctrl+U0

7 কী ("সেট আপ করার পরে")।

সামান্য খাটো:

"সর্বজনীন-যুক্তি" এর ডিফল্ট "4 দ্বারা গুণিত" ব্যবহার করুন এবং এর সাথে শেষ করুন

 ctrl+V 0 

foo --bar = baz ctrl+Uctrl+Uctrl+V0

মাত্র 5 টি চাবি।

alt+nঅ্যাক্সেস ব্যবহার করে (আরগ: এন)

foo --bar = baz Alt+16Ctrl+V0

16 জিরো পেতে 6 টি কী keys

কোনও কীবোর্ড শর্টকাট পরিবর্তন করা হচ্ছে না:

আপনার বাশ যদি আপনি আছে bash C-u kills the currently-being-typed line
এটি কারণ "\C-u":আবদ্ধ হয় unix-line-discard

তবে এটি সাহায্য করতে পারে:
এটির সাহায্যও কার্সারটি মুছার আগে যখন যা হয়, এটি "কিল-রিং" এ রাখা হয়।

সুতরাং ctrl+uমুছে ফেলা এবং ctrl+yইয়ঙ্কস যা মুছেছিল তা ফিরে।
একটি পরিষ্কার লাইন অন: প্রকার 00এটা মুছতে এবং হ্যাঁচকা টান এটা ব্যাক দুইবার এটি না করা 0000। (8 জিরো)
পেতে পুনরাবৃত্তি করুন 00000000, অবশেষে কমান্ডটি টাইপ করুন এবং দু'বার ফিরে ইয়াঙ্ক করুন।

প্রথম সেট (7 কী ctrlটিপে রাখা ):

00 ctrl+Uctrl+Yctrl+Y ctrl+U 

দ্বিতীয় সেট (5 কী)

ctrl+Uctrl+Yctrl+Y ctrl+U 

এটি মুছার রিংয়ে আটটি শূন্য পাবেন, তারপরে আপনি যা চান তা টাইপ করুন:

 ফু - বার = বাজ ctrl-Y ctrl-Y 

পেতে:

foo --bar=baz 0000000000000000

ধারণাটি পাওয়ার পরে, আপনি যা প্রয়োজন তা টাইপ করতে পারেন, লাইনটির শুরুতে ( ctrl-Y) শুরু করতে পারেন , উপরের মতো (আটটি শূন্য পর্যন্ত) শেষ ( ctrl-E) এ যেতে হবে এবং দু'বার ইয়ঙ্ক করতে পারেন।

foo --bar = baz ctrl-A00ctrl-Uctrl-Yctrl-Y ctrl-Uctrl-Yctrl-Y ctrl-U ctrl-Ectrl-Yctrl-Y

এটি 15 কী (নিজেই কমান্ডের পাশে)।
সংক্ষিপ্ত নয়, আমি জানি, তবে এটি কেবল যা পাওয়া যায় তার সাথে কাজ করে।

এটি একটু খাটো:

0000 ctrl-U ctrl-Y ctrl-Y ctrl-Y ctrl-Yctrl-A foo --bar = baz

এটি 11 কী


আমার উত্তরের সম্পাদনা দেখুন ;-)
স্টাফেন চ্যাজেলাস

@ স্টাফেনচাজেলা ম্যাক্রো ব্যবহার করছেন? বেস 36? শুধু zsh এ?
চুম্বন

হ্যাঁ, বেস 36 গালে কিছুটা জিহ্বা ছিল। আমি আপনার F<n>শেষ শব্দ <n>বার নকল করা পছন্দ ।
স্টাফেন চেজেলাস

নোট করুন যে সমস্ত টার্মিনাল F8 এর উপরে একই ক্রম প্রেরণ করে না (যদিও জিএনইউ / লিনাক্স সিস্টেমে পাওয়া যায় তাদের বেশিরভাগই প্রেরণ করে ^[[19~)। "$(tput kf8)"টার্মিনফো ডেটাবেস (বা $terminfoহ্যাশ ইন zsh) থেকে তথ্য পেতে দেখুন ।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস হ্যাঁ, এটি সঠিক। বা সহজভাবে ব্যবহার করুনctrl-v F8
sorontar

2

কাস এর উত্তরের প্রকরণ হিসাবে , টাইপ করুন

printf '0% .s' {1..16}Enter
এবং তারপরে এটি অনুলিপি করে আটকানোর জন্য মাউসটি ব্যবহার করুন (একবারে)। তাত্ক্ষণিকভাবে, এটি ও (লগ এন), তবে যেহেতু এটি (লেন (টিআর (এন)) + ২০) তাই আপনি এটি অকার্যকর বিবেচনা করতে পারেন। তবে দ্রষ্টব্য:

  • আমি একটি চরিত্র মুণ্ডন করতে সক্ষম হয়েছি - আমার সিস্টেমে, %.sএকই আচরণ করে বলে মনে হচ্ছে %.0s
  • আপনি যদি 0000000000000000যুক্তি হিসাবে একাধিক কমান্ড চালাতে চান তবে আপনাকে এটি একবারে করা দরকার।

গ্লেন জ্যাকম্যান উল্লেখ করেছেন যে (যেখানে সংখ্যাটি ধনাত্মক পূর্ণসংখ্যার) সংখ্যা জিরো (এবং একটি নতুন লাইন) একটি স্ট্রিং প্রিন্ট করবে , যেমন বিন্যাসে নক্ষত্রটি আর্গুমেন্ট থেকে ক্ষেত্রের প্রস্থ নিতে বলে । বিশেষত, 16 টি শূন্য প্রিন্ট করবে। তবে এটি একটি বিশেষ কেস যা কেবলমাত্র পরিচালনা করে ।  মুদ্রণ করবে , এবং মুদ্রণ এবং একটি ত্রুটি বার্তা। বিপরীতে এই উত্তরটি অন্যান্য কমান্ড মত স্ট্রিং উত্পাদন করা হবে বা (এবং জন্য নীচে দেখুন )।printf "%0*d\n" number 0printfprintf "%0*d" 16 0 0printf "%0*d" 16 123450000000000012345printf "%0*d" 16 foo0000000000000000123451234512345…foofoofoo…7%7%7%...

আপনি যদি ঘন ঘন এটি করতে যাচ্ছেন তবে আপনি শেল ফাংশনটি সংজ্ঞায়িত করে এটি স্ট্রিমলাইন করতে পারেন:

rep() { printf -- "$1%.0s" $(seq 1 "$2"); printf "\n"; }

মন্তব্য:

  • ব্যবহার করুন $(seq 1 "$2")পরিবর্তে (1.."$2"}দেখুন - কারণ আধুনিক ইচ্ছা কাজ না এই , এই , এই , এবং এই । মনে রাখবেন যে এই প্রশ্নগুলির কয়েকটি উত্তর ব্যবহারের পরামর্শ দেয় evalতবে এটি সাধারণত সুপারিশ করা হয় না।
  • ফর্ম্যাট স্ট্রিং ( $1%.0s) অবশ্যই ডাবল উদ্ধৃতিতে (একক উদ্ধৃতিগুলির চেয়ে) থাকা উচিত কারণ এতে একটি প্যারামিটার রয়েছে ( $1)।
  • এর সাথে শুরু হওয়া মানগুলির --বিরুদ্ধে রক্ষা করা ।$1-
  • "%.0s$1"পরিবর্তে ব্যবহার করে আপনি অনুরূপ সুরক্ষা পেতে পারেন "$1%.0s"
  • যে কোনও উপায়ে, একটি $1মান রয়েছে যা %এটি দম বন্ধ করে দেবে।
  • আপনি হ্যান্ডেল করতে সক্ষম হতে পারে এমন $1মানগুলি রয়েছে %, কি

    rep() { local i; for ((i=0; i<$2; i++)); do printf '%s' "$1"; done; printf "\n"; }

এছাড়াও, একবার আপনার যেমন কোনও ফাংশন সংজ্ঞায়িত হয়ে গেলে আপনি পছন্দ মতো কাজ করতে পারেন

foo --bar=baz "$(rep 0 16)"

যা কিছুটা কম টাইপিংয়ের চেয়ে কম "$(printf '0%.0s' {1..16})"


পর্যায়ক্রমে printf "%0*d" 16 016 জিরো মুদ্রণ করা হবে। ফর্ম্যাটের
তারাটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.