Mi suposición fue la siguiente:
echo "Generating some text" | su - -c cat >/output/file
Pero sudice:
su: must be run from a terminal
¿Qué harías?
shell
shell-script
io-redirection
su
x-yuri
fuente
fuente

Respuestas:
sudoapoya esto.La diferencia es que
sudole pide su contraseña de usuario, no la contraseñaroot(usuario objetivo). Sin embargo, si así lo desea, puede cambiar este comportamiento con la directivatargetpw(runaspworootpw)sudoers.conf.Sin embargo, leer lo que está tratando de hacer, aunque esto resuelve el problema de escalado de permisos, no hará lo que espera. El significado
/output/fileno se creará como usuario root, se creará / modificará como su usuario.La razón de esto es que la redirección de salida de shell se realiza antes de invocar cualquier comando. Entonces, el shell se abre
/output/filey luego pasa ese archivo abierto asu/sudo(y, en consecuencia,cat).Sin embargo, puede
teehacer esto en su lugar, ya que lateeutilidad abrirá el archivo en sí.Básicamente
teecopia la salida en/output/filey STDOUT, sin embargo, STDOUT se redirige a/dev/null.También puedes hacer:
... que es menos críptico.
fuente
sudo -v. Le pedirá su contraseña si no ha usado sudo en unos minutos.Para que lo sepas, no estás limitado a un solo comando por
|pipe:Todos esos procesos se invocan al mismo tiempo, pero todos esperan
|pipeante ellos antes de hacer cualquier cosa, siempre que lean el|pipemensaje, eso es. Entonces, si necesita evaluar una variable midstream o configurar una redirección, puede hacerlo. Solo tomate tu tiempo.Aquí hay otra forma:
Si no lo hace,
( subshell )el comando también$(cat)se obtendrá</dev/tty.Pero si está utilizando un documento aquí, no necesita dos
cats:SALIDA:
La mayor parte de lo anterior es solo para demostrar esto. Todo lo que realmente necesitas es:
fuente