Vraag Zoek naar basishistorie, gedeeltelijke + pijl omhoog


Ik heb gezocht, maar hier niets over gevonden. Ik ben op zoek naar een functionaliteit in bash, met behulp van een terminal.

Lang geleden had ik een gebruiker op een debian-systeem en een vriend bedacht me met een handige geschiedeniszoekfunctie (ik geloof dat ik toen tcsh gebruikte), waar ik het begin van een vorig commando zou typen, pijl-omhoog, en het zou een zoekopdracht uitvoeren, gebaseerd op de gedeeltelijke reeks.

Bijv. als mijn geschiedenis is:

./script.pl
./script.pl arg1
cat output
cat output | grep yada

En ik typ .en druk op de pijl naar boven, het zou me laten zien: ./script.pl arg1. Druk nogmaals op de knop en deze wordt weergegeven ./script.pl, enz.

Heel erg zoals het zou uitvoeren grep op .bash_history. Is er een manier om deze functionaliteit te krijgen?


121
2017-09-03 12:11


oorsprong


mogelijk duplicaat van iPython zoals Command History voor Shell - Marcel Stimberg
@Marcel Het lijkt erop dat het hetzelfde antwoord zou kunnen zijn, ik zag dat in de zoekopdracht, maar verbond het niet met mijn vraag, met de iPython- en Shell-sleutelwoorden. - TLP


antwoorden:


Zet de volgende regels in uw ~/.inputrc:

## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward

Lijnen die beginnen met # zijn opmerkingen. Ik kan me niet herinneren wat achterlijk is en wat verder. Experimenteer ermee. Misschien moet je heen en weer schakelen.


Een beetje achtergrondinformatie:

Bash gebruikt Lees regel om de prompt af te handelen. ~/.inputrc is het configuratiebestand voor de leesregel. Merk op dat dit ook effect zal hebben in andere software die de readline-bibliotheek gebruikt, bijvoorbeeld ipython.

Lees de bash handleiding voor meer informatie over leesregel. Daar kun je ook meer vinden geschiedenis gerelateerde leesregel-commando's.

Om de escape-codes voor de pijltjestoetsen te krijgen, kun je het volgende doen:

  1. Begin cat in een terminal (alleen cat, geen verdere argumenten).
  2. Typ de toetsen op het toetsenbord, u krijgt dingen als ^[[A voor pijl-omhoog en ^[[B voor pijl naar beneden.
  3. Vervangen ^[ met \e.

171
2017-09-03 13:31



Geweldig, maar deze oplossing schakelt de ctrl-left / ctrl-right snelkoppelingen uit. - Eyal
Kan iemand me vertellen hoe ik hetzelfde kan bereiken voor make - Hitesh Kumar
@lesmana, ik zou alleen extra punten geven voor het kattengedeelte - Mike D
Bij het beëindigen van @Eyal, heeft iemand advies over hoe ik dit kan hebben, maar behoud ik ctrl-left / ctrl-right shortcuts? - kbrose
Voor de duidelijkheid, readline moet op de een of andere manier een standaard hebben afgeleid als .inputrc niet bestond, maar die standaardwaarden had verwijderd toen het bestand werd gedetecteerd. Voeg naast de snelkoppelingen van het antwoord regels toe om de ctrl-left / ctrl-right snelkoppelingen te behouden: b. "\e[1;5C":forward-word en "\e[1;5D":backward-word - kbrose


Maak een bestand met de naam setup_readline.sh met modus 644 in /etc/profile.d/ met de volgende inhoud, log in en controleer uw gewenste sleutels:

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

Ik denk dat dit de beste manier is om dit te doen. Meestal als u configuratiebeheersystemen gebruikt zoals chef, marionet, enz

En systeemconfiguratie nog steeds onaangeroerd!


23
2018-06-02 07:58



Vreemd genoeg werkte de ~ / inputrc niet voor mij, maar deed deze commando's in .bash_profile. - Joe
.inputrc bestaat niet in mijn thuismap en ik geef er de voorkeur aan om dit soort instellingen toch in .bashrc te hebben, zodat ik één bestand voor mijn instellingen kan meenemen. Dus dit is waarschijnlijk een beter antwoord dan geaccepteerd. - ShitalShah
.inputrc werkt fabelachtig voor mij, maar niet nadat ik het heb geladen screen. Het vreemde is dat andere .inputrc-snelkoppelingen werken, maar deze niet. Dus ik gebruik nu beide oplossingen. - Orwellophile
Dit is super-handig wanneer u zich bijvoorbeeld aanmeldt bij een server om dingen te doen en daar geen haast van hebt en de ~ / .inputrc op de server niet wilt bewerken en opnieuw wilt laden. - danmactough


Ctrl + R geeft u dit soort functionaliteit. Begin met het typen van een gedeeltelijk commando en het zal oude commando's bevatten die je kunt navigeren met de pijltjes omhoog en omlaag. Meer informatie: http://www.nuxified.org/blog/ctrl_r_in_the_bash_shell


13
2017-09-03 12:17



Bedankt voor je reactie. Ja, ik heb dat geprobeerd, maar ik vind het een beetje ... kieskeurig. Het zal me niet toestaan ​​om te scrollen door opdrachten die beginnen met de gedeeltelijke, het toont alleen de eerste. Het doorzoekt ook de hele opdracht voor het personage, wat een soort van nutteloos is. - TLP
@TLP, herhaal het raken Ctrl+r - akostadinov


Om het antwoord van lesmana met betrekking tot "~ / .inputrc" dat ik zou moeten maken onder mijn Trusty 12.04 te voltooien, verifieer / voeg toe in "~ / .bashrc" (de eerste regel bestaat reeds in mijn "~ / .bashrc"):

shopt -s histappend  
PROMPT_COMMAND='history -a'  

Het is al in het Frans uitgelegd in https://doc.ubuntu-fr.org/terminal?&#pour_completer_les_commandes_a_partir_de_l_historique.


4
2017-10-14 08:31



Deze opdracht instrueert bash in feite om het commando toe te voegen aan het geschiedenisbestand in plaats van te wachten tot de sessie eindigt. Het is handig als je veel terminals open hebt staan ​​en geen geschiedenis wilt verliezen, maar anders niet nodig hebt. digitalocean.com/community/tutorials/... - ShitalShah
Naast het punt, maar Trusty is 14.04. 12.04 is nauwkeurig. - wjandrea


Misschien wil je het proberen https://github.com/dvorka/hstr die eenvoudige en multi-line eenvoudige filtering van de Bash-geschiedenis biedt, die op basis van een metriek (wanneer, hoe vaak en hoe lang de opdrachten van belang zijn) - u kunt pijltoetsen gebruiken om eenvoudig door de geschiedenis te navigeren:

enter image description here

Het kan gemakkelijk zijn gebonden naar Ctrl-r en / of Ctrl-S


0
2017-08-28 22:01