Я зафиксировал его путем установки шрифта с:
SYSFONT=latarcyrheb-sun16
Существует много способов сделать то, что Вы хотите. Этот просто удаляет десятичную точку и все после от номера версии:
VERSION=$(sed 's/\..*//' /etc/debian_version)
\..*
означает период (\.
) сопровождаемый нулем или большим количеством любого символа (.*
). Таким образом, для sed
, выражение s/\..*//
средства заменяют период и все, что не следует ни с чем. Результат sed
команда сохраняется в переменной среды VERSION
.
Вышеупомянутое избавляет от необходимости if/then/elif/.../fi операторы. Это будет работать и с ударом и с обычным/bin/sh.
Еще: sed
потоковый редактор: это означает, что читает строки из stdin, редактирует их согласно инструкциям и (обычно) отправляет их в stdout. В этом случае мы даем ему инструкцию "по замене". Например, s/foo/bar/
средства находят первое вхождение нечто и заменяют его панелью. Как особый случай, s/foo//
замена средств foo
ни с чем. В нашем случае мы хотим заменить период, сопровождаемый любым символом ни с чем. Теперь, период то, за исключением того, что sed
обычно рассматривает период для значения "любого символа". Так, мы должны "выйти" из него путем помещения обратной косой черты перед ним. Когда sed
видит \.
, это знает, что мы имеем в виду литеральный период. Мы также хотим стереть любые символы после периода. Для представления "любого символа" мы используем период .
(никакой Escape). Для генерала, тем не менее, мы хотим удалить все символы после периода, независимо от того, сколько существует. Так, в то время как в sed
язык, период означает любой символ, звезда означает "любое количество предшествующего символа" (который мог быть нулем). Таким образом звезда периода .*
нуль средств или больше любого символа. Так, соединение всего этого, s/\..*//
говорит sed
это, если это находит период, возможно сопровождаемый чем-нибудь, затем ничем заменяет его.
Вот решение, которое использует удар, никакие внешние утилиты, и является единственным вызовом
read -d . VERSION < /etc/debian_version
Это читает /etc/debian_version
, разделяет вход на периоде (.
), присваивает все перед периодом к VERSION
и отбрасывания все после.
IFS='.' read VERSION VERSION_MINOR < /etc/debian_version
Это немного отличается в этом, это сохраняет все после периода в VERSION_MINOR
IFS='.' read -a VERSION < /etc/debian_version
Этот является самым мощным в этом, это разделяет на периоде и присваивает массиву $VERSION
. Если версия 1.2.3
затем ${VERSION[0]} == 1
${VERSION[1]} == 2
и ${VERSION[2]} == 3
.
case `cat /etc/debian_version` in
7*) VERSION=7;;
*) VERSION=NONE;;
esac
Конечно, это может быть расширено для распознавания большего количества версий.
s/
средняя часть, но что относительно\..*
? – Danijel-James W 21.01.2014, 04:20\.
Я просто не мог понять второе.
. Спасибо за разъяснение этого для меня. – Danijel-James W 22.01.2014, 04:27