Ma supposition était la suivante:
echo "Generating some text" | su - -c cat >/output/file
Mais su
dit:
su: must be run from a terminal
Qu'est-ce que tu ferais?
shell
shell-script
io-redirection
su
x-yuri
la source
la source
Réponses:
sudo
soutient cela.La différence étant que vous
sudo
demandez votre mot de passe utilisateur, pas le mot de passeroot
(utilisateur cible). Cependant, si vous le souhaitez, vous pouvez modifier ce comportement avec la directivetargetpw
(ourunaspw
ourootpw
) danssudoers.conf
.Cependant, lire ce que vous essayez de faire, même si cela résout le problème de l'escalade des autorisations, ne fera pas ce que vous attendez. La signification
/output/file
ne sera pas créée en tant qu'utilisateur root, elle sera créée / modifiée en tant qu'utilisateur.La raison en est que la redirection de sortie du shell est effectuée avant d'appeler des commandes. Ainsi, le shell s'ouvre
/output/file
puis passe ce fichier ouvert àsu
/sudo
(et par conséquent,cat
).Cependant, vous pouvez le faire
tee
à la place, car l'tee
utilitaire ouvrira le fichier lui-même.Copie essentiellement
tee
la sortie dans/output/file
et STDOUT, mais STDOUT est redirigé vers/dev/null
.Vous pourriez également faire:
... qui est moins cryptique.
la source
sudo -v
. Il vous demandera votre mot de passe si vous n'avez pas utilisé sudo depuis quelques minutes.Juste pour que vous le sachiez - vous n'êtes pas limité à une seule commande par
|pipe
:Tous ces processus sont invoqués en même temps - mais ils attendent tous
|pipe
avant eux avant de faire quoi que ce soit - tant qu'ils lisent le|pipe
tout, c'est-à-dire. Donc, si vous avez besoin d'évaluer une variable en cours de route ou de configurer une redirection, vous le pouvez. Prenez votre temps.Voici une autre façon:
Si vous ne
( subshell )
le faites pas, la commande$(cat)
sera</dev/tty
également récupérée.Mais si vous utilisez un here-doc, vous n'avez pas besoin de deux
cat
s:PRODUCTION:
La plupart de ce qui précède est juste pour faire une démonstration. Tout ce dont vous avez vraiment besoin est:
la source