Meine Vermutung war wie folgt:
echo "Generating some text" | su - -c cat >/output/file
Aber su
sagt:
su: must be run from a terminal
Was würden Sie tun?
shell
shell-script
io-redirection
su
x-yuri
quelle
quelle
Antworten:
sudo
unterstützt dies.Der Unterschied besteht darin, dass Sie
sudo
nach Ihrem Benutzerpasswort gefragt werden, nicht nach demroot
(Zielbenutzer-) Passwort. Wenn Sie dies wünschen, können Sie dieses Verhalten mit der Anweisungtargetpw
(oderrunaspw
oderrootpw
) in ändernsudoers.conf
.Wenn Sie jedoch lesen, was Sie tun möchten, wird das Problem der Eskalation von Berechtigungen zwar gelöst, es wird jedoch nicht das tun, was Sie erwarten. Die Bedeutung
/output/file
wird nicht als Root-Benutzer erstellt, sondern als Ihr Benutzer erstellt / geändert.Der Grund dafür ist, dass die Umleitung der Shell-Ausgabe erfolgt, bevor Befehle aufgerufen werden. Die Shell öffnet sich also
/output/file
und übergibt diese geöffnete Datei ansu
/sudo
(und folglichcat
).Sie können
tee
dies jedoch stattdessen verwenden, da dastee
Dienstprogramm die Datei selbst öffnet.Grundsätzlich wird
tee
die Ausgabe in/output/file
und STDOUT kopiert, STDOUT wird jedoch in umgeleitet/dev/null
.Sie könnten auch tun:
... was weniger kryptisch ist.
quelle
sudo -v
. Sie werden nach Ihrem Passwort gefragt, wenn Sie sudo seit einigen Minuten nicht mehr verwendet haben.Nur damit Sie wissen - Sie sind nicht auf einen einzigen Befehl beschränkt
|pipe
:Alle diese Prozesse werden gleichzeitig aufgerufen - aber sie warten alle auf das
|pipe
Vorher, bevor sie tatsächlich etwas tun -, solange sie das|pipe
überhaupt lesen . Wenn Sie also eine Variable im Midstream auswerten oder eine Umleitung einrichten müssen, können Sie dies tun. Nimm dir die Zeit, die du brauchst.Hier ist ein anderer Weg:
Wenn Sie dies nicht tun, wird
( subshell )
der Befehl$(cat)
ebenfalls angezeigt</dev/tty
.Wenn Sie jedoch ein Here-Doc verwenden, benötigen Sie keine zwei
cat
s:AUSGABE:
Das meiste davon dient nur dazu, dies zu demonstrieren. Alles was Sie wirklich brauchen ist:
quelle