[gröstenteils gelößt]Wass passiert bei var="$var1"

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
wanne
Moderator
Beiträge: 7548
Registriert: 24.05.2010 12:39:42

[gröstenteils gelößt]Wass passiert bei var="$var1"

Beitrag von wanne » 31.08.2013 18:44:13

Hi, ich wollte eine funktion mit ähnlichen auswirkungen wie das Ubuntu der Fall ist bauen:
Das funktioneirt:

Code: Alles auswählen

function sudo { var="$@"; su -c "$var" -;};
Das nicht:

Code: Alles auswählen

function sudo { su -c "$@" -;};
Fehlermeldung:

Code: Alles auswählen

$ sudo echo a
Kein Passworteintrag für Benutzer »a«
Warum? Wo ist der unterschied?

PS: Fallen eucht gründe ein warum der Wrapper unsicherer ist als sudo? Halte ih eher für sicherer weil er keine Variablen übernimmt.
Der Befehl wird in meinem Fall vollständig als user expandiert. Weiß aber nicht ob das jetzt gut oder schlecht ist.
Zuletzt geändert von wanne am 31.08.2013 19:21:32, insgesamt 1-mal geändert.
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
goeb
Beiträge: 348
Registriert: 26.08.2006 18:12:08
Lizenz eigener Beiträge: MIT Lizenz

Re: Wass passiert bei var="$var1"

Beitrag von goeb » 31.08.2013 19:16:56

Setzte doch mal die Werte für die Variablen ein. Im ersten Fall:

Code: Alles auswählen

su -c "echo a" -
Im zweiten Fall:

Code: Alles auswählen

su -c "echo" "a" -
Für 1. gilt dann:
man su hat geschrieben:Wenn su ohne username aufgerufen wird, wechselt es standardmäßig zu Root.
Und zweitens wäre eben:
su hat geschrieben:su [Optionen] [Benutzername]
Edit: "$@" wird praktisch so expandiert wie die Parameter übergeben wurden. Wenn z.B. ein Skript so aufgerufen wird:

Code: Alles auswählen

$ ./skript "1 2 3" 4 5
dann wird "$@" zu "1 2 3" "4" "5". Wenn du es erst in eine andere Variable kopierst funktioniert es das nicht mehr. (Die Anführungszeichen um $@ sind dabei notwendig.)
Zuletzt geändert von goeb am 31.08.2013 19:24:56, insgesamt 1-mal geändert.

wanne
Moderator
Beiträge: 7548
Registriert: 24.05.2010 12:39:42

Re: Wass passiert bei var="$var1"

Beitrag von wanne » 31.08.2013 19:20:43

OK, verstanden. Jetzt ist die Frage: Geht das schöner? Vor allem schlukt die dash das noch nicht.
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
goeb
Beiträge: 348
Registriert: 26.08.2006 18:12:08
Lizenz eigener Beiträge: MIT Lizenz

Re: [gröstenteils gelößt]Wass passiert bei var="$var1"

Beitrag von goeb » 31.08.2013 19:28:35

POSIX-Shell-Funktionen werden so deklariert:

Code: Alles auswählen

name() {
  # ...
}
Ansonsten müsste es funktionieren wie in der Bash.

wanne
Moderator
Beiträge: 7548
Registriert: 24.05.2010 12:39:42

Re: [gröstenteils gelößt]Wass passiert bei var="$var1"

Beitrag von wanne » 31.08.2013 19:33:41

Ah, das Problem hatte ich schonmal. Habe sogar noch ein Script, das mir die function deklerationen entrfent und durch die ()-Syntax ersetzt. Aber im Moment einfach nicht dran gedacht. :oops:
rot: Moderator wanne spricht, default: User wanne spricht.

Antworten