sudo
suporta isso.
$ echo hello world | sudo cat
SUDO password:
hello world
A diferença é que sudo
solicita sua senha de usuário, não a senha root
(usuário de destino). No entanto, se você desejar, poderá alterar esse comportamento com a diretiva targetpw
(ou runaspw
ou rootpw
) em sudoers.conf
.
No entanto, ao ler o que você está tentando fazer, embora isso resolva o problema de escalonamento de permissões, ele não fará o que você espera. O significado /output/file
não será criado como o usuário raiz, ele será criado / modificado como seu usuário.
A razão para isto é que o redirecionamento de saída do shell é feito antes de chamar qualquer comando. Portanto, o shell abre /output/file
e, em seguida, passa esse arquivo aberto para su
/ sudo
(e, consequentemente, cat
).
No entanto, você pode usar tee
para fazer isso, pois o utilitário tee
abrirá o arquivo em si.
echo "hello world" | sudo tee /output/file >/dev/null
Basicamente tee
copia a saída em /output/file
e STDOUT, no entanto STDOUT é redirecionado para /dev/null
.
Você também pode fazer:
echo "hello world" | sudo sh -c 'cat > /output/file'
... o que é menos enigmático.