Bash hostname completion | Arabesque



Bash hostname completion | Arabesque

As part of its programmable completion suite, Bash includes hostname completion. This completion mode reads hostnames from a file in hosts(5) format to find possible completions matching the current word. On Unix-like operating systems, it defaults to reading the file in its usual path at /etc/hosts.

For example, given the following hosts(5) file in place at /etc/hosts:

127.0.0.1      localhost  192.0.2.1      web.example.com www  198.51.100.10  mail.example.com mx  203.0.113.52   radius.example.com rad  

An appropriate call to compgen would yield this output:

$ compgen -A hostname  localhost  web.example.com  www  mail.example.com  mx  radius.example.com  rad  

We could then use this to complete hostnames for network diagnostic tools like ping(8):

$ complete -A hostname ping  

Typing ping we and then pressing Tab would then complete to ping web.example.com. If the shopt option hostcomplete is on, which it is by default, Bash will also attempt host completion if completing any word with an @ character in it. This can be useful for email address completion or for SSH username@hostname completion.

We could also trigger hostname completion in any other Bash command line (regardless of complete settings) with the Readline shortcut Alt+@ (i.e. Alt+Shift+2). This works even if hostcomplete is turned off.

However, with DNS so widely deployed, and with system /etc/hosts files normally so brief on internet-connected systems, this may not seem terribly useful; you'd just end up completing localhost, and (somewhat erroneously) a few IPv6 addresses that don't begin with a digit. It may seem even less useful if you have your own set of hosts in which you're interested, since they may not correspond to the hosts in the system's /etc/hosts file, and you probably really do want them looked up via DNS each time, rather than maintaining static addresses for them.

There's a simple way to make host completion much more useful by defining the HOSTFILE variable in ~/.bashrc to point to any other file containing a list of hostnames. You could, for example, create a simple file ~/.hosts in your home directory, and then include this in your ~/.bashrc:

# Use a private mock hosts(5) file for completion  HOSTFILE=$HOME/.hosts  

You could then populate the ~/.hosts file with a list of hostnames in which you're interested, which will allow you to influence hostname completion usefully without messing with your system's DNS resolution process at all. Because of the way the Bash HOSTFILE parsing works, you don't even have to fake an IP address as the first field; it simply scans the file for any word that doesn't start with a digit:

# Comments with leading hashes will be excluded  external.example.com  router.example.com router  github.com  google.com  ...  

You can even include other files from it with an $include directive!

$include /home/tom/.hosts.home  $include /home/tom/.hosts.work  


Read full article from Bash hostname completion | Arabesque


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