Para usar um comando com o echo
operador de redirecionamento "into a file" >>
através sudo
do comando ..., escrevi que redirecionar através da entrada padrão para o sudo
processo, executado como superusuário. O comando para redirecionar era echo "tun" >> /etc/modules-load.d/tun.conf
, aqui eu coloquei whoami
em seu lugar.
tentei
echo 'whoami' | sudo -i '$SHELL -c "exec $(< /dev/stdin)"'
e a seguir,
echo 'whoami' | sudo -i '$SHELL -c "$(< /dev/stdin)"'
e sh
respondeu -sh: /bin/sh -c "$(< /dev/stdin)": not found
.
Para que serve isso? Por que a distribuição Alpine Linux sh
não encontra meus comandos executados por meio de sudo
?
sudo -V
(número da versão e versões compiladas):
Sudo version 1.9.15p5
Sudoers policy plugin version 1.9.15p5
Sudoers file grammar version 50
Sudoers I/O plugin version 1.9.15p5
Sudoers audit plugin version 1.9.15p5
Obrigado por qualquer resposta! 🙂
Note que a mensagem de erro diz que o arquivo
/bin/sh -c "$(< /dev/stdin)"
não foi encontrado. Ele tenta executar toda a string como um comando porque você dissesudo
para fazer isso (a string era o único argumento para o comando, além da-i
opção desnecessária).Em vez disso, você gostaria de usar
... que roda
$SHELL
com-c
eexec $(< /dev/stdin)
como argumentos. Note, porém, que se$SHELL
for um shell que não entende substituições de processo, comosh
, você não esperaria que o script de shell em linha produzisse qualquer saída. Em vez disso, use$SHELL -s
(execute o shell e faça com que ele leia seus comandos da entrada padrão):