Search code examples
bashfilesudo

Bash echo text into sudo file


I am trying to push some text into a file which requires sudo:

sudo echo "some text" > /etc/path/to/file

But I keep getting the following error:

bash: /etc/path/to/file: Permission denied

I can do it with nano, but I kind of need to do it programmatically. Is it a problem with the > operator? Is there a script I can use instead?


Solution

  • Shell (bash in this case) does the redirection (>) first before running the command. So /etc/path/to/file will be created before the command with sudo even runs and the normal user does not have sufficient permission to create the file /etc/path/to/file, hence the error message regarding permission.

    You can do:

    sudo bash -c 'echo "some text" > /etc/path/to/file'
    

    Or use tee:

    echo "some text" | sudo tee /etc/path/to/file