Die meisten Skripte, die Parse/proc/cmdline es brechen in Worte zu fassen und dann Argumente mit einer case-Anweisung herauszufiltern, zB:Splitting/proc/cmdline Argumente mit Leerzeichen
CMDLINE="quiet union=aufs wlan=FOO"
for x in $CMDLINE
do
»···case $x in
»···»···wlan=*)
»···»···echo "${x//wlan=}"
»···»···;;
»···esac
done
Das Problem ist, wenn die WLAN-ESSID hat Räume. Benutzer erwarten wlan='FOO
BAR '(wie eine Shell-Variable) und erhalten dann das unerwartete Ergebnis 'FOO
mit dem obigen Code, da die FOR-Schleife auf Leerzeichen aufgeteilt.
Gibt es eine bessere Möglichkeit, die /proc/cmdline
von einem Shell-Skript zu analysieren, das es fast ausschließt?
Oder gibt es ein paar Tricks? Ich dachte, ich könnte vielleicht Benutzer bitten, Leerzeichen zu entziffern und so zu dekodieren: /bin/busybox httpd -d "FOO%20BAR"
. Oder ist das eine schlechte Lösung?
Ihre Shell analysiert bereits die Befehlszeile, Argumente zu teilen. Warum wollen Sie es "aufsparen" und nicht einfach davon ausgehen, dass der Benutzer das Argument korrekt zitiert - wie es mit jedem anderen Befehl zu tun hat? Wenn Sie eine Datei mit Leerzeichen entfernen möchten, geben Sie «rm» mit Leerzeichen "» ein. Was ist, wenn Ihre ESSID «essid wlan = FOO» ist? – liori
Ok, ich habe den gleichen Fehler gemacht wie JesperE ... – liori