12

Почему следующие два исполнения отличаются по выводу? (Мне нужны двойные кавычки для переменных в моей возможной команде)

$ 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 ответа2

19

Bash выполняет серию расширений перед выполнением команды (в данном случае sudo ). В первом случае подстановка команды выполняется потому, что она в двойных кавычках - она выполняется как вы, отсюда и ошибка. Во втором случае одинарные кавычки предотвращают раскрытие, поэтому обратные кавычки не подставляются до тех пор, пока не будет запущена оболочка root.

Смотрите также https://www.gnu.org/software/bash/manual/bashref.html#Quoting.

6

В первом примере обратные пометки оцениваются вашей оболочкой (как вы, а не как root). Попробуй с

sudo su -c "echo `whoami`"

Во втором с одинарными кавычками ' вся строка echo `cat /root/root_file` передается в корневую оболочку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .