Hello everyone.
This post is about bash, the shell providing so many users easy access to the underlying power of their system.
(not bash the quote database, although i really like that website too ;-) )
Most people know the basics, but getting to know it better can really increase your productivity. And when that happens, you might start loving bash as much as I do ;-)
I assume you have a basic knowledge of bash, the history mechanism, and ~/.bash* files.
So here they are, my favorite tricks, key combo's and some bonus stuff:
Tricks
- "cd -" takes you back to the previous directory, wherever that was. Press again to cycle back.
- putting arguments between braces {like,so} will execute the command multiple times, once for each "argument". Bash will make the cartesian product when doing it multiple times in 1 expression. Some less-obvious tricks with this method are mentioned here
- HISTIGNORE : with this variable you have control over which things are being saved in your history. Here is a nice explication. Especially the space trick is very useful imho.
- CD_PATH : Here is a great explanation ;-)
- readline (library used by bash) trick: put this in your ~/.inputrc (or /etc/inputrc) :
"\e[5~": history-search-backward
"\e[6~": history-search-forward
This way you can do *something*+pageup/pagedown to cycle through your history for commands starting with *something*
You can use the up/down arrows too, their codes are "\e[A" and "\e[B"
- for more "natural" history saving behavior (when having several terminals open): put this in .bash_profile:
PROMPT_COMMAND='history -a' (write each command separately in a new entry, instead of all at shell exit).
And type shopt -s histappend to append instead of overwrite. (this might be default on some distro's. I think it was on Gentoo)
Shortcuts/keycombos
- ctrl+r : search through your history. Repeatedly press ctrl+r to cycle through hits.
- ctrl-u : cut everything on the current line before the cursor.
- ctrl-y : paste text that was cut using ctrl-u. (starting at the cursor)
- !$: equals the last word of the previous command. (great when performing several operations on the same file)
Bonus material
- Bash completion, an add-on for bash which adds completion for arguments of your commands. It's pretty smart and configurable. (it's in portage, and probably in repos of all popular distros out there)
- This script provides you an interface to the rafb pastebin!
- Recursively delete all .svn folders in this folder, and in folders below. "find . -name .svn -print0 | xargs -0 rm -rf"
- Recursively count number of files in a directory: "find -not -type d | wc -l"
Conclusion
Those were all important tricks I'm currently using. On the web you'll find lots more useful tips :-).
If that still isn't enough, there is also man bash :o
With aliases and scripts (and involving tools like sed or awk) the possibilities become pretty much endless. But for that I refer to tldp.org and your favorite web search engine.
Trackback URL for this post:
http://dieter.plaetinck.be/trackback/5
Thank you
Thank you for posting this. I went looking for a way to do the readline trick, and came across this. I feel much the wiser having read it.
Post new comment