I have tried:
sudo "some string" >> test.txt
But I am getting permission denied warning.
Can anyone help?
Server Fault is a question and answer site for system and network administrators. It only takes a minute to sign up.
Sign up to join this communityDepends on how much access your administrator has given you via sudo. The simplest answer, assuming that you have permission to do so, is to run "sudo -s" to get a privileged shell and then just do your
echo somestring >> test.txt
as 'normal'. If you need to do it automatedly:
sudo /bin/sh -c 'echo somestring >> test.txt'
The reason that what you have won't work (other than the fact that you left what I assume to be an "echo" command out) is that the file redirection happens in the context of your shell and the sudo only applies to the command you told it to run.
sudo -s
instead of firing up /bin/sh explicitly?
sudo bash -c "echo 'some string' >> test.txt"
The problem in your original try is that the ">>" is happening in the shell running as you; bash opens the file, not whatever is being run by sudo. In my version, you're passing the whole command including the redirection to a bash run by sudo.
% echo "string" | sudo tee -a test.txt
You can try ex-way:
sudo ex +'$put =\"some string\"' -cwq foo.txt
It's simple in-place file editing and it's useful in scripts, so you don't have to do any shell piping.
sed
is more stream oriented (can only read the file forward), so you'll have to read the whole file. ex
is editor (predecessor of vi
), so you can place the cursor at the end and append the text, so it allows more complex things to do. You still can use -i
(in-place) in sed
, but this option is not quite compatible between Linux/Unix and we don't have any pattern to replace here, so I guess it won't work in this case.
Lots of people recommend tee
for this, but I don't like the side-effect of writing to stdout
. An alternative is cat
:
sh some_script.sh | sudo sh -c 'cat >> somefile.txt'
If cat
had an argument like tee
's -a
flag, that would be a little handier:
sh some_script.sh | sudo pseudocat -a somefile.txt
But unfortunately it doesn't.