Mi suposición fue la siguiente:
echo "Generating some text" | su - -c cat >/output/file
Pero su
dice:
su: must be run from a terminal
¿Qué harías?
shell
shell-script
io-redirection
su
x-yuri
fuente
fuente
Respuestas:
sudo
apoya esto.La diferencia es que
sudo
le 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
(runaspw
orootpw
)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/file
no 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/file
y luego pasa ese archivo abierto asu
/sudo
(y, en consecuencia,cat
).Sin embargo, puede
tee
hacer esto en su lugar, ya que latee
utilidad abrirá el archivo en sí.Básicamente
tee
copia la salida en/output/file
y 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
|pipe
ante ellos antes de hacer cualquier cosa, siempre que lean el|pipe
mensaje, 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
cat
s:SALIDA:
La mayor parte de lo anterior es solo para demostrar esto. Todo lo que realmente necesitas es:
fuente