Служба Systemd не сохраняет изменения на диск

Этот ответ объясняет, какой пользователь выполняет подстановку команд $(whoami), показанную в вопросе. На самом деле, мы надеемся, что конструкция echo $(whoami)никогда не будет использоваться, поскольку whoamiсам по себе будет правильным способом вывода имени пользователя текущего пользователя.

Вызов echoпри подстановке команды просто не нужен и может даже при некоторых обстоятельствах изменить вывод команды в подстановке команды. Не используйте echo $(...).

Запуск whoamiвыведет имя непривилегированного пользователя в вопросе, а sudo whoamiвыведет root.


Чтобы оболочка запускала команду

sudo echo $(whoami)

он должен сначала выяснить, с какими аргументами вызывать sudo. echo— это просто строка, поэтому оболочка ничего с ней не делает, а $(whoami)— это подстановка команд, которую необходимо расширить. Он делает это, выполняя whoamiи заменяя подстановку команды своим выводом. Затем он готов вызвать sudo.

Это означает, что sudoбудет выполняться с echoи выводом whoami(, который был выполнен от вашего непривилегированного пользователя )в качестве аргументов.

Если вы хотите запустить whoamiвнутри замены команды на sudo,вы можете поместить его в скрипт и запустить скрипт с sudo, как вы сделали, или вы можете использовать скрипт в строке -, как в

sudo sh -c 'echo "$(whoami)"'

Здесь сценарий sh -cзапускается от имени пользователя root, поэтому whoamiтакже будет выполняться от имени пользователя root.

Дело в том, что оболочка, которая запускает whoami, выполняется от имени пользователя root.

Оболочка, которая выполняет whoamiв первой команде, sudo echo $(whoami), запускается как обычный пользователь, а не root.

1
22.07.2020, 16:42
1 ответ

ExecStartне является нормальной строкой оболочки. Изsystemd.service(5):

ExecStart=

Commands with their arguments that are executed when this service is started. The value is split into zero or more command lines according to the rules described below (see section "Command Lines" below).

Вы работаете с системным блоком, а не с пользовательским, так что вы уже rootи вам не нужно усложнять Execсsudo:

ExecStart=/bin/bash -c "echo 0 > /sys/module/hid_apple/parameters/fnmode"
4
18.03.2021, 23:18

Теги

Похожие вопросы