Parameter von Grub-CMD lesen
Moin, ich kann ja dem Kernel bzw. dem System auf der Kommandozeile parameter mitgeben, splash=silent etc. pp. Nun will ich einen Parameter selber setzen und auswerten. z.B. MeinParameter=123 Über /proc/cmdline komme ich ja an die ganzen Parameter ran. Nur: Wie kann ich die auf der Bash verwursten? Es gibt parameter mit nem Gleichheitsszeichen im Parameter, dann wieder welche ganze ohne Zuweisungen.... Irgendwie seh ich gerade den Wald nicht..... Gruß Daniel -- Daniel Spannbauer Systemadministration marco Systemanalyse und Entwicklung GmbH Tel +49 8333 9233-0 Rechbergstr. 4-6 Fax +49 8333 9233-11 D 87727 Babenhausen Mobil +49 171 4033220 http://www.marco.de/ Email ds@marco.de Geschäftsführer Martin Reuter HRB 171775 Amtsgericht München -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
On Thu, 5 Feb 2015 14:19, Daniel Spannbauer wrote:
Moin,
ich kann ja dem Kernel bzw. dem System auf der Kommandozeile parameter mitgeben, splash=silent etc. pp.
Nun will ich einen Parameter selber setzen und auswerten.
z.B. MeinParameter=123 Über /proc/cmdline komme ich ja an die ganzen Parameter ran. Nur: Wie kann ich die auf der Bash verwursten? Es gibt parameter mit nem Gleichheitsszeichen im Parameter, dann wieder welche ganze ohne Zuweisungen....
Irgendwie seh ich gerade den Wald nicht.....
Trennzeichen ist ein "Leerzeichen". Wenn du einen Parameter pro Zeile möchtest, kannst do "tr ' ' '\n'" dafür benutzen, oder gleich eine "for" schleife nehmen, die will Leerzeichen. [code] for param in $(</proc/cmdline); do # hier parameter verwurstung, ein parameter pro duchlauf done [oder] while read param ; do # hier parameter verwurstung, ein parameter pro duchlauf done < $(tr ' ' '\n' </proc/cmdline) [/code] zur Verwurstung selber, grep und eval sind da helfer. [code] #$param hat aktuellen Parameter, s.o. # parameter OHNE '=' bekommen '=1' angehängt echo $param |grep -c '=' >/dev/null || param="$param=1" # BÖSE, nicht gut, such Dir 'ne andere Lösung # setzt param als shell variable eval $param [/code] Wenn Dich nur ein spezieller parameter interessiert, geht das auch etwas anders, hier nur die Verwurstung [code] case $param in MyParameter=*) eval $param;; *) ;; esac [/code] Anstelle von eval kann dann auch sed, oder bash selbst genommen werden [code] # Name ist hier "MyParameter", interesanter teil NACH '=' Variable=${param#MyParameter=} [/code] Wenn param="MyParameter=blubber", dann erhalten wir Variable="blubber" Komplett also: [code] #!/usr/bin/bash Variable='nix_da' for param in $(</proc/cmdline) ; do case param in MyParameter=*) Variable=${param#MyParameter=};; *) ;; esac done if [ "$Variable" = 'nix_da' ] ; then # MyParameter=.... nicht gesetzt else # MyParameter=... gesetzt! # Inhalt in $Variable fi [/code] Hinweis: falls MyParameter=.. mehrfach existiert, gilt nur das letzte Vorkommen Sind das die Hinweise die Du suchtest? - Yamaban
Hallo, Am Thu, 05 Feb 2015, Yamaban schrieb:
On Thu, 5 Feb 2015 14:19, Daniel Spannbauer wrote:
z.B. MeinParameter=123 Über /proc/cmdline komme ich ja an die ganzen Parameter ran. Nur: Wie kann ich die auf der Bash verwursten? Es gibt parameter mit nem Gleichheitsszeichen im Parameter, dann wieder welche ganze ohne Zuweisungen....
Irgendwie seh ich gerade den Wald nicht.....
Trennzeichen ist ein "Leerzeichen".
Wenn du einen Parameter pro Zeile möchtest, kannst do "tr ' ' '\n'" dafür benutzen, oder gleich eine "for" schleife nehmen, die will Leerzeichen. [code] for param in $(</proc/cmdline); do # hier parameter verwurstung, ein parameter pro duchlauf done [oder]
POSIX kompatibel (also ohne Bashism) geht das z.B. auch so: set -- $(cat /proc/cmdline); for param in "$@"; do echo "$param"; done Mit bashism: set -- $(< /proc/cmdline); for param; do echo "$param"; done Die 'for p in $(< /proc/cmdline )' Variante erscheint mir aber eleganter. Auswerten würde ich das übrigens per case und z.B. so: case "$param" in MeinParameter*) IFS="=" set -- "$param"; MeinValue="$2"; ;; esac oder eher noch so (Bashism?): case "$param" in MeinParameter=*) MeinValue="${param#*=}"; ;; esac Beispiel zu letzterem: $ ( for p in $(</proc/cmdline); do echo "$p => ${p%%=*} = ${p#*=}"; done; ) root=/dev/disk/by-label/ROOT_SSD_1 => root = /dev/disk/by-label/ROOT_SSD_1 noresume => noresume = noresume splash=native => splash = native showopts => showopts = showopts edd=off => edd = off pcsp=enable=1 => pcsp = enable=1 elevator=deadline => elevator = deadline vga=normal => vga = normal Mit ${p%=*} bekommst du den Teil vor dem ersten = eines Parameters, mit ${p#*=} den danach, mit ${p##*=} den nach dem letzten = (sofern mehrere vorkommen). Ich hab seit Jahren das hier in meiner ~/.bashrc # alias basename='echo ${1##*\/}' # alias dirname='echo ${1%\/*}' Ja, auskommentiert, aber nachgucken tu ich's öfters :) Schema ist: vor letztem Trenner: ${ VARIABLE % TRENNER * } vor erstem Trenner: ${ VARIABLE %% TRENNER * } nach letztem Trenner: ${ VARIABLE ## * TRENNER } nach erstem Trenner: ${ VARIABLE # * TRENNER } $ ( p="foo=bar=baz=bonk";
echo ${p%=*} echo ${p%%=*} echo ${p##*=} echo ${p#*=} ) foo=bar=baz foo bonk bar=baz=bonk
HTH, -dnh -- 266: Allradantrieb Allradantrieb bedeutet, dass man dort stecken bleibt, wo der Abschleppwagen nicht hinkommt. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (3)
-
Daniel Spannbauer
-
David Haller
-
Yamaban