Thursday, May 2, 2024
288
rated 0 times [  288] [ 0]  / answers: 1 / hits: 134220  / 1 Year ago, mon, february 6, 2023, 2:09:11

I have searched, but not found anything on this. I am looking for a functionality in bash, using a terminal.



Way back when, I had a user on a debian system, and a friend set me up with a convenient history search feature (I believe I used tcsh then), where I would type the beginning of a previous command, hit up-arrow, and it would do a search, based on the partial string.



E.g. if my history is:



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


And I type ., and press up-arrow, it would show me: ./script.pl arg1. Press it again and it would show ./script.pl, etc.



Very much like it would perform a grep on .bash_history. Is there a way to get this functionality?


More From » command-line

 Answers
4

Create ~/.inputrc and add these lines:


# Respect default shortcuts.
$include /etc/inputrc

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


TIP: Read at the bottom for an explanation of $include /etc/inputrc or what to do if you already have the file ~/.inputrc.



Lines starting with # are comments.


I can't remember what is backward and what forward. Experiment with it. Maybe you have to switch backward and forward.


Close and re-open all terminals for the new behaviour to become effective.




A bit background information:


Bash is using readline to handle the prompt. ~/.inputrc is the configuration file for readline. Note that this will also take effect in other software using the readline library, for example IPython.


Read the bash manual for more information about readline. There you can also find more history related readline commands.


To get the escape codes for the arrow keys you can do the following:



  1. Start cat in a terminal (just cat, no further arguments).

  2. Type keys on keyboard, you will get things like ^[[A for up arrow and ^[[B for down arrow.

  3. Replace ^[ with e.


For more information about ^[ and e see here: https://unix.stackexchange.com/a/89817/380515




About the line $include /etc/inputrc:


Readline tries to read ~/.inputrc for configuration. If that file does not exists it will try to read /etc/inputrc. That means if ~/.inputrc exists it will not read /etc/inputrc.


Some distros have prepared some config in /etc/inputrc. If you then create ~/.inputrc you will lose the prepared config. This may or may not be what you want. To still keep the prepared config in /etc/inputrc you can use the line $include /etc/inputrc in your ~/.inputrc.


If you already have the file ~/.inputrc that means you either already know what you are doing. Or you inherited if from the person who set up your system. Or you previously followed a different guide which told you to create the file and forgot about it. Either way you might want to check /etc/inputrc and decide if you want to keep it with the line $include /etc/inputrc.


[#43620] Tuesday, February 7, 2023, 1 Year  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
rmodmi

Total Points: 390
Total Questions: 122
Total Answers: 111

Location: Venezuela
Member since Mon, Oct 18, 2021
3 Years ago
;