12

Why to the following two executions differ in output? (I need double quotes for variables in my eventual command)

$ sudo su -c "echo `cat /root/root_file`"
cat: /root/root_file: Permission denied
$ sudo su -c 'echo `cat /root/root_file`'
Yay, highly classified content!

2 Answers 2

19

Bash performs a series of expansions before the command is executed (sudo in this case). In the first case, the command substitution is performed because it's in double quotes -- it executes as you, hence the error. In the second case, the single quotes prevent expansions, so the backticks are not substituted until root's shell is running.

See also https://www.gnu.org/software/bash/manual/bashref.html#Quoting

5

In the first example the backticks are evaluated by your shell (as you and not root). Try with

sudo su -c "echo `whoami`"

In the second one with the single quotes ' the whole string echo `cat /root/root_file` is passed to the root shell.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .