BASH Autocompletion - Stuff… And Things…



BASH Autocompletion - Stuff… And Things…

A couple of posts back, I showed off some functions to pop up notifications when a host became pingable again or when a port became reachable. Today's (semi) quick tip is how to use BASH's autocomplete functionality add hostname autocompletion to those notifications functions.

BASH autocompletion is a system that provides tab completion of command arguments. You're familiar with it's default behavior which is to complete filenames and paths.

1  2  3  4  
~ ls enctypt<TAB>  encrypt              encrypt-only-sym.rb  encrypt-time.rb  encrypt-decrypt.rb   encrypt-sym.rb       encrypt.rb  ~  ls encrypt

You can override this behavior by providing BASH with a list of possible completions. The list can be a literal list of words, or it can be a function that looks at the current environment ($PWD, user, time on day, etc) and generates context aware list.

So, what we want is a way to generate a list of hosts we know about. And, it just so happens we have such a list lying around. You know how the first time you SSH to a new server, your prompted to confirm it's identity? Well, that confirmation, along with the host's name is stored in ~/.ssh/known_hosts. From that file we can extract a list which should cover most of the servers we care about.

The simple approach is to build a list when you login. If you Google around you'll find lots of example scripts for pulling hostnames out of known_hosts, but the most common looks like:

1  
echo `cat ~/.ssh/known_hosts | cut -f 1 -d ' ' | sed -e s/,.*//g | uniq | grep -v "\["`

The command that setups autocompletion is complete. When giving it a list, pass them in as an augument to the -W option:

1  
complete -W "$(echo `cat ~/.ssh/known_hosts | cut -f 1 -d ' ' | sed -e s/,.*//g | uniq | grep -v "\["`;)" wait-for-host

I'm capturing the output of the command with $() and wrapping it in double quotes. The last argument is the name of the command (which can be also be a function or alias) that will use this autocompletion. Now we get this:


Read full article from BASH Autocompletion - Stuff… And Things…


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts