Search code examples
linuxbashshellubuntused

Append line to /etc/hosts file with shell script


I have a new Ubuntu 12.04 VPS. I am trying to write a setup script that completes an entire LAMP installation. Where I am having trouble is appending a line to the /etc/hosts file. My current hosts file looks like this:

127.0.0.1       localhost Venus

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

I would like it to look like this:

127.0.0.1       localhost Venus
192.241.xx.xx  venus.example.com venus

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

I have tried a variety of sed commands using the append (\a) command. For some reason Ubuntu either just echoes the contents of the hosts file in terminal or does nothing at all. How would I properly inject the second line into the file with a bash script?


Solution

  • Make sure to use the -i option of sed.

    -i[SUFFIX], --in-place[=SUFFIX]
      edit files in place (makes backup if extension supplied)
    
    sed -i "2i192.241.xx.xx  venus.example.com venus" /etc/hosts
    

    Otherwise,

    echo "192.241.xx.xx  venus.example.com venus" >> /etc/hosts
    

    would append the line at the end of the file, which could work as you expect.