Większość skryptów, które parse/proc/cmdline złamać go w słowa, a następnie odfiltrować argumenty z oświadczeniem Case, przykład:Dzielenie/proc/cmdline ze spacjami
CMDLINE="quiet union=aufs wlan=FOO"
for x in $CMDLINE
do
»···case $x in
»···»···wlan=*)
»···»···echo "${x//wlan=}"
»···»···;;
»···esac
done
Problem jest, gdy WLAN ESSID ma spacje. Użytkownicy oczekują ustawienia wlan='FOO
BAR '(jak zmienna powłoki), a następnie uzyskają nieoczekiwany wynik 'FOO
z powyższym kodem, ponieważ pętla for podzieli się na spacje.
Czy istnieje lepszy sposób analizowania /proc/cmdline
ze skryptu powłoki, który jest prawie nieoceniony?
A może masz jakieś sztuczki? Pomyślałem, że mógłbym poprosić użytkowników o utworzenie cudzysłowów i dekodowanie w ten sposób: /bin/busybox httpd -d "FOO%20BAR"
. A może to złe rozwiązanie?
Twoja powłoka już analizuje wiersz poleceń, dzieląc argumenty. Dlaczego chcesz go "odseparować", a nie tylko założyć, że użytkownik prawidłowo przytoczy argument - tak jak ma to miejsce w przypadku każdego innego polecenia? Jeśli chcesz usunąć plik z spacją, wpisz "rm" z spacją "». Co jeśli twój ESSID to "essid wlan = FOO"? – liori
Ok, zrobiłem ten sam błąd co JesperE ... – liori