Updated SC2024 (markdown)

koalaman
2014-09-11 11:13:46 -07:00
parent 4c5cfe131f
commit 9250f97d58

@@ -1,9 +1,32 @@
# SC2024 sudo doesn't affect redirects. Use ..| sudo tee file ## sudo doesn't affect redirects. Use ..| sudo tee file
## Problematic Code: ### Problematic code:
sudo echo 'export FOO=bar' > /etc/profile sudo echo 'export FOO=bar' >> /etc/profile
## Correct Code: ### Correct code:
echo 'export FOO=bar' | sudo tee /etc/profile > /dev/null echo 'export FOO=bar' | sudo tee -a /etc/profile > /dev/null
### Rationale:
Redirections are performed by the current shell before `sudo` is started. This means that it will use the current shell's user and permissions to open and write to the file.
`tee` is a simple command that opens and writes to files without help from the shell, which means that it will use the permissions that `sudo` grants it.
There is nothing special about `tee`. It's just the simplest command that can both truncate and append to files without help from the shell. Here are equivalent alternatives:
Truncating:
echo 'data' | sudo dd of=file
echo 'data' | sudo sed 'w file'
Appending:
echo 'data' | sudo awk '{ print $0 >> "file" }'
echo 'data' | sudo sh -c 'cat >> file'
### Contraindications
If you want to run a command as root but redirect as the normal user, you can ignore this message.