[sisyphus] Вопрос по os-release
Alexey Gladkov
legion на altlinux.ru
Чт Фев 28 15:59:26 MSK 2013
28.02.2013 15:35, Pavel Vainerman wrote:
>> У паранои должны быть пределы иначе можно перестать доверять выводу
>> системных утилит и содержимому конфигов.
> согласен.. при условии (того, что вы написали ниже).
Я продемонстрирую почему я так толсто троллингово возмущаюсь:
$ dd if=/dev/urandom of=/tmp/badfile count=1 bs=512
$ cat /tmp/test.sh
#!/bin/sh -efu
. /tmp/badfile || echo "BAD FILE"
echo "END"
$ /tmp/test.sh
/tmp/badfile: line 1: unexpected EOF while looking for matching ``'
$ echo "Foo bar baz" > /tmp/badfile
$ LANG=C /tmp/test.sh
/tmp/badfile: line 1: Foo: command not found
Шеллы могут быть любыми, но результат будет один: синтаксическая ошибка.
Таким образом нарушается базовое условие формата этого конфига и
обработать такой сорс можно только через subshell:
$ cat /tmp/test.sh
#!/bin/sh -efu
( . /tmp/badfile ) || echo "BAD FILE"
echo "END"
$ /tmp/test.sh
/tmp/zzz: line 1: Foo: command not found
BAD FILE
END
Но в этом случае переменные из этого конфига не забрать простым
способом и это всё равно, что выуживать их sed'ом по одной. Как раз
этого хотели избежать создатели формата этого файла.
А учитывая, что формат допускает вот такие конструкции:
Example: NAME=Fedora or NAME="Debian GNU/Linux".
получение значений sed'ом делается ещё более весёлой задачей.
> если из этого сообщения будет понятно что битый файл os-release
> (ну или что где то в нём ошибка)..
Как я показал выше показать что именно файл битый можно, но выглядеть
эта проверка будет очень забавно. Безусловно я добавлю её раз возник
прецедент с записью туда мусора.
--
Rgrds, legion
Подробная информация о списке рассылки Sisyphus