මට bash ඉතිහාසය සෙවීමට සහ විධානයක් නැවත ක්‍රියාත්මක කරන්නේ කෙසේද?


Answers:


450

ටයිප් Ctrl Rවිධාන රේඛාවේ දී ඇති අතර පෙර පැවති විධාන ටයිප් කිරීම ආරම්භ කරන්න. ප්‍රති result ලයක් දර්ශනය වූ පසු Ctrl Rඅනෙක් තරඟ බැලීමට දිගටම පහර දෙන්න . ඔබට අවශ්‍ය විධානය දර්ශණය වූ විට, ඔබන්නEnter

අතර බව සටහන Ctrl Rප්රකෘතිය වේ, ඔබ අණ අවශ්ය නම්, ( reverse-search-history) වෙත බැඳී කිරීමට Ctrl Tඔබ පහත සඳහන් සමඟ බව වින්යාස හැකි:

බන්ධනය '' t Ct ": ප්‍රතිලෝම-සෙවුම්-ඉතිහාසය '

ඔබට කියවිය හැකි වෙනත් කියවීම් බන්ධනය කළ හැකි විධාන රාශියක් තිබේ. bashමෑන් පිටුව දෙස බලන්න .

අන්තර්ක්‍රියාකාරී විධාන ඉතිහාසය සෙවීමට සහ ප්‍රවේශ වීමට බාෂ්ට බොහෝ පහසුකම් ඇත. වඩාත්ම මූලික වන්නේ historyබිල්ඩින් ය. යතුරු ලියනය කිරීම:

$ ඉතිහාසය

සංඛ්‍යාත්මක දර්ශකයක් සමඟ විධාන ලැයිස්තුවක් මුද්‍රණය කරයි, වැනි:

$ ඉතිහාසය
1 පැහැදිලි
2 ls -al
3 vim ~ / somefile.txt
4 ඉතිහාසය
$

මිච් පෙන්වා දුන් !පරිදි, ඔබට මෙම විධානයන්ගෙන් ඕනෑම සංඛ්‍යාවක් ඒවායේ සංඛ්‍යාත්මක දර්ශකය භාවිතයෙන් ක්‍රියාත්මක කළ හැකිය .

$! 1

clearවිධානය ක්‍රියාත්මක කරයි . බිල්ටින් හි ඉතිහාසය තුළම බොහෝ විශේෂාංග ඇත, ඔබට bashසහ historyමිනිසා පිටුවල තවත් දැක ගත හැකිය .

නිර්මාණකරු භාවිතා කරන විට ඔබට සාපේක්ෂ negative ණාත්මක ඕෆ්සෙට් ද නියම කළ හැකිය !, එබැවින් ඉහත අපගේ ඉතිහාස ලැයිස්තුව භාවිතා කරමින් vim, අපට නැවත ක්‍රියාත්මක කිරීමට අවශ්‍ය නම් , අපට කළ හැක්කේ:

$! -2

එය මූලික වශයෙන් ඔබ "විධාන දෙකකට පෙර" ධාවනය කළ විධානය ක්‍රියාත්මක කරන ලෙස බාෂ්ට කියයි. ඉතිහාස ලැයිස්තුවේ පෙර විධානය ක්‍රියාත්මක කිරීම සඳහා, අපට භාවිතා කළ හැකිය !!(එය කෙටිමං පමණි !-1).

මෙම !designator ඔබ සංඛ්යාත්මකව දිවෙන වන විධාන නියම කිරීමට සීමා නොවන බවයි. විධානයක්bash ආරම්භ කිරීමට (භාවිතා කිරීමට !) හෝ විධානය තුළම (භාවිතා කරමින් !?) පෙළ මත පදනම්ව විධානයක් ක්‍රියාත්මක කිරීමට ඔබට උපදෙස් දිය හැකි බව hayalci පෙන්වා දුන්නේය . නැවතත්, ඉහත අපගේ උදාහරණ ඉතිහාස ලැයිස්තුව භාවිතා කරමින්, අපට clearනැවත ක්‍රියාත්මක කිරීමට අවශ්‍ය නම් , අප කළ යුත්තේ ටයිප් කිරීම පමණි:

$! cl

සහ ඔබන්න Enter. මොකද vim? එය එතරම්ම සරල ය:

$!? සමහරක්

හයල්සිගේ ප්‍රතිචාරයේ වැදගත්ම කරුණ නම් බිල්ඩින් වෙත කැඳවීම shopt:

$ shopt -s histverify

මෙය විසින් ගැලපෙන විධාන වන පිණිස එම ඉතිහාසය සත්යාපනය සක්රිය වනු ඇත !, !!සහ !?designators අන්ධ ලෙස ක්රියාත්මක නොවන, එහෙත් ඔබ ඔවුන් ක්රියාත්මක පෙර කිසි නපුරක් කරන්නේ සහතික කළ හැකි නිසා, ඒ වෙනුවට විධාන රේඛාව මත පුරවා. ඔබ root පරිශීලකයා ලෙස විධාන ක්‍රියාත්මක කරන විට මෙය ඊටත් වඩා වැදගත් වේ. මෙම විකල්පය ඔබේ .bashrcආරම්භක ගොනුවේ සැකසිය හැකි අතර එමඟින් ඔබ පිවිසෙන සෑම විටම එය සකසා ඇත.

දැනටමත් පෙන්වා දී ඇති පරිදි, මෙම සියලු තොරතුරු bashමෑන් පිටුවෙන් ලබා ගත හැකිය . සඳහා!, !!, සහ!? නිර්මාණකරුවන්, 9.3 කොටස පුළුල් කිරීම බලන්න .


41
+1 මම සියලුම පද්ධති සඳහා වසර 12 ක් තිස්සේ ලිනක්ස් භාවිතා කරමි. මම දැනගෙන හිටියේ නැහැ ඒක තියෙනවා කියලා. මට +10 හැකි නම් මම එය මග හැරියේ කෙසේද ??
අයිඩන් බෙල්

1
බොහෝ පද්ධති වල, ඉහළ ඊතලය එබීම එකම දේ කරයි.
mas

කවුරුහරි '!', '!!', '!?', 'ඉතිහාසය | grep ', සහ' ctrl-r 'යන්න සවිස්තරාත්මක පිළිතුරක් ලෙස මම එය තෝරා ගනිමි
රිචඩ් හොස්කින්ස්

shoptbash_profile නොව bashrc තුළට යයි (හෝ පිවිසුම් කවච නොවන ෂෙල් සඳහා එය සක්‍රීය නොවේ).
ටෝබු

2
CTRL + R එබීමෙන් පසු ඔබට පෙර විධානය වෙත ආපසු යාමට CTRL + SHIFT + R භාවිතා කළ හැකිය
Gal Bracha

38

විකල්පයක් ලෙස crtl+R, ඔබට ටයිප් කිරීමෙන් ඉතිහාසය සෙවිය හැකිය

!text

මෙය 'පෙළ' වලින් ආරම්භ වන නවතම විධානය සඳහා ඉතිහාසය සොයනු ඇත .

නමුත් වැරදි විධානයක් ක්‍රියාත්මක වීම වැළැක්වීම සඳහා මෙය ඔබේ .bashrc තුළ තැබීමට මම යෝජනා කරමි.

shopt -s histverify

කිසියම් ඉතිහාස ක්‍රියාවකින් පසු (වැනි !!:s/prev_text/after_text), එය ප්‍රති line ල රේඛාව විධාන විමසුමට තබන පරිදි මෙය බාෂ්ට උපදෙස් දෙයි . එවිට ඔබට විධානය සමාලෝචනය කිරීමට හෝ සංස්කරණය කිරීමට හැකිය, පසුව Enter ඔබන්න.


5
"පෙළ" අඩංගු (ආරම්භයට වඩා වෙනස්ව) නවතම විධානය නැවත ක්‍රියාත්මක කිරීමට !? පෙළ භාවිතා කරන්න.
mark4o

3
කවුරුහරි '!', '!!', '!?', 'ඉතිහාසය | grep 'සහ' ctrl-r 'සවිස්තරාත්මක පිළිතුරක් ලෙස මම එය තෝරා ගනිමි.
රිචඩ් හොස්කින්ස්


16

ප්‍රතිලෝම-සෙවුම්-ඉතිහාසය පුරා ඉතිහාසය-සෙවීම-පසුපසට භාවිතා කිරීමට මම කැමැත්තෙමි. හිටපු ඔබ අණ ක චරිත කිහිපයක් ටයිප් කිරීමට ඉඩ දෙයි නම් සෙවුම් string ටයිප් පළමුව, සොයන්න ප්රධාන පහර විරුද්ධ ලෙස, සෙවුම් යතුර ඔබන්න.

මගේ පද්ධතියේ පෙරනිමියෙන්, එම්පී සහ එම්එන් සමාන කාර්යයන් සමඟ බැඳී ඇති නමුත් ඊතල යතුරු බැඳීමට මම කැමැත්තෙමි:

bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'

13

මට නියම අන්වර්ථයක් ඇත, h. එය සැබවින්ම "ඉතිහාසය | grep" ය, නමුත් මම පෙර "h විධානය" ඇතුළත් කිරීම් "grep -E -v" සමඟ පෙරහන් කරමි.

alias h="history | grep -E -v '^ *[0-9]+ *h ' | grep "

වැනි භාවිතා

h aliases
2003  less .bash_aliases

1
වෙත විධානය එකතු කිරීමෙන් ද මෙය කළ හැකිය HISTIGNORE.
tanenbring

12

විශිෂ්ට ලිවීම, ෂෝන්! මම මෙය අදහස් දැක්වීමක තබමි, නමුත් මම කීර්තිමත් කරුණු කිහිපයක් ලැජ්ජා වෙමි. :-)

තවත් ආශ්‍රිත හා ප්‍රයෝජනවත් තාක්‍ෂණයක් වන්නේ වචනයක් වෙනස් කිරීමේදී පෙර විධානයක් ක්‍රියාත්මක කිරීමේ හැකියාවයි. ඔබ නාමාවලි නාමය ටයිප් කළ බව පවසන්න, නැතහොත් ගොනුවේ නම වෙනස් කිරීමට අවශ්‍ය යැයි කියන්න:

$ ප්‍රතිරාවය මගේ නම බොබ්
මගේ නම බොබ්
$ ^ බොබ් ^ ජෝර්දාන්
echo මගේ නම ජෝර්දාන්
මගේ නම ජෝර්දාන්

විධානය ක්‍රියාත්මක වීමට පෙර විධානය පුළුල් කිරීම, ප්‍රතිස්ථාපනය කිරීම සහ ප්‍රතිදානය කිරීම සැලකිල්ලට ගන්න, එබැවින් වැරදි විධානය ක්‍රියාත්මක වන්නේ නම් එය කරන්නේ කුමක්දැයි බැලූ බැල්මට පෙනේ.


6

Ctrl-r භාවිතා කරමින් ඉතිහාසය හරහා ගමන් කිරීම IMO කරදරකාරී බැවින් ඔබට hh :

https://github.com/dvorka/hstr

එමඟින් විධානය ක්‍රියාත්මක කිරීම ඇතුළුව සංචලනය වඩාත් සරල, සරල හා කාර්යක්ෂම කරයි:

රූප විස්තරය මෙහි ඇතුළත් කරන්න


එය භාවිතා කරන්නේ කෙසේද? මෙම පින්තූරය බැලීමට එබිය යුතු යතුරු මොනවාද?
නකිලොන්

2
ඔබ hh ස්ථාපනය කළ පසු ඔබට hh විධානය භාවිතා කළ හැකිය, නැතහොත් ලේඛනයේ විස්තර කර ඇති පරිදි ඕනෑම යතුරුපුවරු කෙටිමඟකට (සාමාන්‍යයෙන් Ctrl-r) බැඳ තබන්න.
මාටින් ඩ්වොරක්

එය ctrl + rදැන් පෙරනිමියෙන් බැඳී ඇත
ඇලෙයෝ

4

Bash විධාන විමසුමේදී, control-R ටයිප් කරන්න, ඉන්පසු ඔබට අවශ්‍ය විධානයේ අක්ෂර කිහිපයක් ටයිප් කරන්න, එවිට bash හි කියවීමේ පහසුකම එම විධානය සඳහා විධාන ඉතිහාසය හරහා සොයනු ඇත.

ඔබ සෙවීම ආරම්භ කළ පසු, ඊළඟ ගැලපුම් විධානය වෙත පනින්න ඔබට නැවත පාලක-ආර් ටයිප් කළ හැකිය.


3

viයතුරු බැඳීම් ( set -o viහෝ set editing-mode viඇතුළත $HOME/.inputrc) භාවිතා කිරීම සඳහා ඔබේ කවචය වින්‍යාස කර තිබේ නම්, ඔබ විධාන රේඛා ඉතිහාසය හරහා චක්‍රයට (ඊළඟ) හෝ (පෙර) <Esc>/some-command<Return>පහර දී පහර දෙන්න .nShift-n


මෙය Vim භාවිතා කරන්නන්ට වඩාත්ම සමීප වේ.
ගැබෝර් මාටන්

2

CTRL+ RJohn1024 යෝජනා කළ පරිදි + හොඳින් ක්‍රියා කරයි, නමුත් ඔබගේ මෑත කාලීන විධානයන් බොහෝමයක් සමාන නම් සහ ඒවා සියල්ලම පරිලෝකනය කිරීමට ඉක්මන් ක්‍රමයක් ඔබට අවශ්‍ය නම් එය තරමක් වෙහෙසකරය. විකල්පයක් වනුයේ history:

$ history | grep keyword

1

මම HSTR වලට කැමතියි නමුත් සමහර විට එය ස්ථාපනය කිරීමට මට නොහැකි බව පෙනේ. ඒ නිසා මම අන්වර්ථයක් ලිව්වේ fzf භාවිතා කරමින් එහි හැසිරීම අනුකරණය කරන ( hx“ඉතිහාසය ක්‍රියාත්මක කිරීම” සඳහා)

alias hx='eval $(history | sed "s/^ *[0-9]* *//g" | fzf --tac --tiebreak=index --height=10)'
  • history : හොඳයි, ඉතිහාසය ලබා ගන්න
  • sed : ලැයිස්තුවෙන් අංක තීරුව ඉවත් කරන්න (POSIX)
  • fzf: මෙහි මැජික්, ඔබ අනොන්ය ලැයිස්තුව, හෝ සමග ඉදිරියට ගමන්-සොයන්න සිනිඳු කිරීමට ඉඩ C-Jහා C-Kසමග විධානය ක්රියාත්මක පසුව, Enter.
  • --height : පෙන්වා ඇති පේළි ගණන සකසන්න.
  • --tac : ආපසු ලැයිස්තුව (ඉතිහාසය සඳහා වඩාත් තාර්කික)
  • --tiebreak=index : fzf ප්‍රති .ල යාවත්කාලීන කරන විට ඉතිහාස අනුපිළිවෙල තබා ගන්න
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.