Вы можете попробовать просто,
Создать файл с именем myscript
со следующим содержанием:
#!/bin/bash
echo -n "Enter Run level":
read rl;
sudo init $rl;
Где echo
используется для печати того, что вводится, read
используется для получения ввода и сохранения в переменной rl
и sudo init $rl;
для выполнения команды для изменения уровня выполнения.
Для большего контроля/проверки ввода можно использовать циклы, такие как while
и case
.
Вы должны дать разрешение на выполнение: sudo chmod +x myscript
, чтобы он мог быть выполнен.
Затем вы можете запустить скрипт как:
$ ./myscript
$ Enter Run level : 3
EDIT:
как @RuiFRibeiro подсказал, команда для изменения уровня выполнения - telinit
:
NAME
telinit - change system runlevel
SYNOPSIS
telinit [OPTION]... RUNLEVEL
DESCRIPTION
telinit may be used to change the system runlevel.
Поэтому, вы должны использовать telinit
вместо init
в скрипте.
А для проверки уровня выполнения можно использовать команду who -r
или runlevel
, которая выводит предыдущий и текущий уровень выполнения.
$ who -r | awk '{print $1,$2}'
run-level 3
$ runlevel
2 3
Это хороший повод придерживаться таких менеджеров пакетов, как yum
, или, в худшем случае, rpm
, но избегать установки из исходников. .
Таким образом, решением было бы установить эту недостающую зависимость с пакетом RPM. Было бы неплохо сначала удалить тот, который вы установили из исходного кода, но иногда это может быть немного сложно.
База данных зависимостей RPM не может сказать, что вы установили пакет из исходного кода. База данных RPM знает только о метаданных, присутствующих в пакетах RPM, пакет, установленный из источника, не содержит этих метаданных.
Некоторые сценарии configure, которые собирают пакет из исходного кода, создают pkg-config
, который представляет собой метаданные об установленном пакете. Тем не менее, нет четкой интеграции между метаданными из pkg-config
и метаданными RPM (или метаданными DEB
, или метаданными pacman
). При упаковке дистрибутива упаковщики вставляют метаданные в определенном формате в пакеты (например, пакеты RPM), и эти метаданные используются для определения зависимостей. Не метаданные в какой-либо другой форме.
С другой стороны, в одной системе могут быть разные версии библиотеки. По умолчанию (т.е. согласно стандартам кодирования GNU , которым следует большинство пакетов) сценарий configure
должен устанавливать свои продукты в / usr / local
.В то время как пакеты, упакованные дистрибутивом (например, RPM
), должны устанавливать свое содержимое в / usr
.
Следовательно, если вы следуете соглашению (называемое FHS ) и сохраняете пакеты / библиотеки, установленные из исходного кода в / usr / local
, затем устанавливаете ту же библиотеку через RPM
не будет конфликтовать с вашей библиотекой (поскольку упаковщики дистрибутива следуют FHS).
Когда RPM недоступен, вы можете создать его самостоятельно. Для этого вам нужно собрать пакет / библиотеку из исходного кода и установить его в фиктивное место (корень сборки). Затем предоставьте метаданные, необходимые для пакета RPM, и упакуйте их в файл RPM. В TLDP есть устаревшее, но очень подробное руководство по созданию RPM .