Re: Umleitung in Datei bei Sudo?



Andreas Mandalka <andreas@xxxxxxxxxxx> writes:

Wenn ich folgende Zeile als entsprechender Benutzer, dem die Datei gehört)
ausführe:
./etded.x86 +set fs_homepath ${GS_HOME} [...] 2>server.log
dann funktioniert alles wie es soll; etded.x86 wird ausgeführt und in der
Serverlog steht, was drin stehen soll.

Wenn ich obere Zeile in eine Datei hineinpacke und die mittels sudo
ausführe:
sudo -u ${GS_USER} screen -dmS gameserver-${GS_USER} DATEI_MIT_BEFEHL.bash
dann funktioniert es auch.

Wenn ich allerdings den ganzen Aufruf in eine Zeile schreibe (also oberste
Zeile inklusive sudo):
sudo -u ${GS_USER} screen -dmS gameserver-${GS_USER} ./etded.x86 +set
fs_homepath [...] 2>server.log
dann wird die Datei server.log nicht angelegt. Wenn ich vorher die Datei
selbst anlege und dem Benutzer die Schreibrechte geben, funktioniert es auch
nicht; die Datei bleibt einfach leer. Das Programm an sich läuft jedoch.

Woran könnte das liegen?

Die Umlenkung des Fehlerkanals, »2>server.log«, wird vom das Kommando
interpretierenden Shell, nicht vom »sudo«-Programm bewerkstelligt.

Was musst Du also tun? Starte mittels »sudo« ein Shell, das die
Umlenkung vornimmt und die Aufgabe übergeben bekommt, den Programmaufruf
»./etded.x86 ...« vorzunehmen.

Das geht so:

sudo -u ${GS_USER} screen -dmS gameserver-${GS_USER} \
sh -c 'exec ${1+"$@"} 2>server.log' sh \
./etded.x86 +set fs_homepath ${GS_HOME} [...]

Hinweis: Die »\« an den Zeilenenden bedeuten, dass die nächste Zeile
eigentlich hintendran gehört. Du musst sie also genau dann weglassen,
wenn Du alles in eine sehr lange Zeile schreiben willst.

Um zu verstehen, was bei diesem Kommando (soll heißen, bei »sh -c ...«
passiert, lies im Manual-Page des Shells im Abschnitt »OPTIONS« bei
Option »-c«, im Abschnitt »PARAMETERS« beim Unterabschnitt »Special
Parameters«, »@«, und im Abschnitt »EXPANSION«, »Parameter Expansion«
nach.

Ohne, dass Du das verstanden hast, solltest Du die Kommandozeile
eigentlich dem Shell nicht überantworten, mindestens nichts daran ändern.

Ist für mich wichtig, dass es alles in einer Zeilt funktioniert, bzw. in
einem Skript.

Sollte es tun.

Du solltest Dich dringend schlau machen, was es heißt, einem Shell eine
Kommandozeile zur Ausführung zu übergeben und folgende Aussagen und
Fragen bedenken:

In Unix/Linux gibt es beim Start eines Programms keine Kommandozeilen
sondern nur Programmaufrufe, denen Parameter mitgegeben werden.

Nun scheint aber

$ Programm mit Parametern und 2>Umlenkung

eine Kommandozeile zu sein.

Doch wie entsteht nun aus der Zeile ein Programmaufruf mit
Parameterliste?

Was hat das Shell dabei zu tun?

Wie unterscheidet sich in der Kommandozeile die Kanalumlenkung
»2>Umlenkung« von einem an das Programm übergebenen Parameter, der aus
der Zeichenfolge »2>Umlenkung« besteht?

Wie wird dem Shell mitgeteilt, welche Wörter der Kommandozeile
Kanalumlenkungen und welche Parameter sind?

Wer nimmt die Kanalumlenkung vor?

Wenn Du die Fragen beantworten kannst, dann ist auch das von Dir
geschilderte Verhalten zu erklären.
--
Wenn Sie mir E-Mail schreiben, stellen | When writing me e-mail, please
Sie bitte vor meine E-Mail-Adresse | precede my e-mail address with
meinen Vor- und Nachnamen, etwa so: | my full name, like
Helmut Waitzmann <xxx@xxxxxxxxxxx>, (Helmut Waitzmann) xxx@xxxxxxxxxxx
.



Relevant Pages

  • Re: C++ und fork
    ... dem eigenen Programm heraus aufzurufen ... komplizierten Programmen heraus die Shell auf. ... 'system'-Argument als Kommandozeile uebergeben wird. ... Und es gibt zumindest für nicht-Unixe Implementationen, ...
    (de.comp.os.unix.programming)
  • Re: Fehler im script
    ... Jedoch geht es hier nicht um ein Skript sondern um ein Shell, ... arbeitet also die Datei als Shell-Skript ab. ... Starte das Programm »sh« und gib ihm folgende 3 Parameter mit: ... Parameter als Kommandozeile, erwarte in ihm also Shell-Kommandos, die du ...
    (de.comp.os.unix.shell)
  • Re: Konqueror: Problem mit =?iso-8859-1?Q?Kontext-Men=FC?= und Shell-Befehl
    ... Leider wird dieser Befehl nicht korrekt ausgeführt, ... konvertierende Datei in einem Verzeichnis steht, ... wenn KDE so eine Kommandozeile bekommt; ... Die Shell bekommt aber offensichtlich etwas anderes zu sehen. ...
    (de.comp.os.unix.shell)
  • Re: Kommandozeilenparameter durchschleifen
    ... Seit wann gibt es IRGENDEINE Shell, ... Kommandozeile zu modifizieren, bevor sie sie an's aufgerufene Programm ... Es ist nicht Aufgabe des Programms, die Quotingregeln zu beherrschen, ...
    (de.comp.lang.delphi.misc)
  • Re: Flock im Shellscript
    ... Das Shell, das das Shell-Skript abarbeitet, beschwert sich ... ist keine korrekte Kommandozeile. ... ob damit eine Shell-Kommandozeile oder ein Programm gemeint ... Falls keine Fehlermeldungen, sondern die Ausgabe ...
    (de.comp.os.unix.shell)