Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I'm trying to add a line into the hosts file on my Mac by executing a one line command on the terminal.

I thought this would be easy using sudo, but it returns "permission denied" when I try to add >> to the hosts file, but it works if I try replace > the hosts contents.

sudo echo test >> /etc/hosts
-bash: /etc/hosts: Permission denied
$

sudo echo test > /etc/hosts
Password:
$ 

OS is up to date.

share|improve this question
    
simply use a text editor (started with sudo) to modify your /etc/hosts –  MrSmith42 Jan 19 '13 at 21:08
1  
I want to make a script that will help automate this, so a text editor wouldn't help in this case. –  Mint Jan 19 '13 at 21:12

3 Answers 3

up vote 6 down vote accepted

That's because echo is being run as root, but the shell is the one actually performing the redirection. You need to spawn a new shell for this to work:

sudo -- sh -c "echo test >> /etc/hosts"

Edit: I haven't seen the fact that the > redirect works; I can't explain that.

share|improve this answer
    
I feel it's worth noting the utility tee because allowing a subshell execution from sudo is and should be blocked in most production environments for security reasons. –  Steve Buzonas Dec 25 '13 at 23:50

Rather then running echo through a redirect which will be run as your current user, not root as echo is being run in your example, use tee as Steve Buzonas suggests

 echo 'test' | sudo tee -a /etc/hosts

The sudo is now applied to the tee command. The '-a' appends to the file

This will also output tee to standard output. If you don't want to see 'test' in your terminal also add: > /dev/null to the end of that line.

share|improve this answer

To ensure that a new line was created first, I used this:

sudo -- sh -c "echo  \ \ >> /etc/hosts";sudo -- sh -c "echo 127.0.0.1  testdomain.com >> /etc/hosts"
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.