O operador de redirecionamento não faz parte do seu comando sudo
. Em outras palavras, quando você executa sudo bash -c echo "profile" > /sys/class/drm/card0/device/power_method
, o que realmente acontece é:
- O shell executa
sudo bash -c echo "profile"
-
sudo
, que tem o bit setuid definido, solicita sua senha e bifurca o processobash -c echo "profile"
com EUID definido como 0 (isto é, o comando é executado como raiz) - O comando
bash
executaecho "profile"
e imprimeprofile
na saída padrão como raiz. -
bash
termina,sudo
termina - O shell que executa o comando original tira a string da saída padrão e tenta redirecioná-la para
/sys/class/drm/card0/device/power_method
, o que gera umPermission denied
, pois o shell não está sendo executado com privilégios de root.
Existem várias maneiras de resolver isso. Uma é dar a string inteira com o operador de redirecionamento como argumento para bash -c
:
sudo bash -c 'echo "profile" > /sys/class/drm/card0/device/power_method'
Eu também já vi pessoas usarem tee
, que parece mais legal (e não executa o comando echo
como root):
echo "profile" | sudo tee /sys/class/drm/card0/device/power_method
tee
lê a entrada padrão e as saídas para a saída padrão both e todos arquivos que você passou como parâmetros.