Redirect output to a file permission denied?

user1871869 picture user1871869 · May 15, 2013 · Viewed 12.2k times · Source

I want to do a simple redirection. When I do

sudo curl <insert link here> > a.txt

I want to take all of the data outputted by the curl into a.txt. However, I keep getting an error saying

a.txt: Permission denied

Would anyone have any idea how to get around this? I've tried looking online by doing

sudo bash -c curl <insert link here> > a.txt

and that displays the same error. Any help would be appreciated! Thanks!

Answer

Cairnarvon picture Cairnarvon · May 15, 2013

The privilege elevation only applies to the curl process (and, in the second example, the child shell) itself, not to your (parent) shell, and therefore not to the redirection.

One solution is to do the redirection within the child shell itself:

sudo bash -c "curl $LINK >a.txt"

Another, fairly idiomatic option is to use tee:

curl $LINK | sudo tee a.txt >/dev/null

For curl specifically, you can also make the process itself write to the file directly:

sudo curl -o a.txt $LINK