Meu palpite foi o seguinte:
echo "Generating some text" | su - -c cat >/output/file
Mas su
diz:
su: must be run from a terminal
O que você faria?
shell
shell-script
io-redirection
su
x-yuri
fonte
fonte
Respostas:
sudo
suporta isso.A diferença é que
sudo
solicita sua senha de usuário, não a senharoot
(usuário de destino). No entanto, se você desejar, poderá alterar esse comportamento com a diretivatargetpw
(ourunaspw
ourootpw
) emsudoers.conf
.No entanto, lendo o que você está tentando fazer, enquanto isso resolve o problema de escalação de permissão, ele não fará o que você espera. O significado
/output/file
não será criado como o usuário root, será criado / modificado como seu usuário.A razão para isso é que o redirecionamento de saída do shell é feito antes de chamar qualquer comando. Portanto, o shell é aberto
/output/file
e passa o arquivo aberto parasu
/sudo
(e consequentementecat
).No entanto, você pode
tee
fazer isso, pois otee
utilitário abrirá o próprio arquivo.Basicamente,
tee
copia a saída para/output/file
e STDOUT, no entanto, STDOUT é redirecionado para/dev/null
.Você também pode fazer:
... o que é menos enigmático.
fonte
sudo -v
. Ele solicitará sua senha se você não tiver usado o sudo em alguns minutos.Só para você saber - você não está limitado a um único comando por
|pipe
:Todos esses processos são invocados ao mesmo tempo - mas todos esperam
|pipe
antes de realmente fazer qualquer coisa - desde que eles leiam o|pipe
que é. Portanto, se você precisar avaliar uma variável no meio do caminho ou configurar um redirecionamento, poderá. Leve o tempo que precisar.Aqui está outra maneira:
Caso contrário,
( subshell )
o comando também$(cat)
ficará</dev/tty
.Mas se você estiver usando um documento aqui, não precisará de dois
cat
s:RESULTADO:
A maioria dos itens acima é apenas para demonstração. Tudo o que você realmente precisa é:
fonte