Выполните трехэтапный процесс выбора, сохранения и формирования интересующего диапазона данные. Последней задачей вывода на стандартный вывод является автозадача sed
.
host='Foo_0';
sed -Ee '
# Step-1: SELECT RANGE
/^define hostgroup[{]/,/^[}]/!b
# Step-2: SAVE RANGE DATA
H; /^define hostgroup[{]/h; /^[}]/!d
# Step-3: SHAPE RANGE DATA
g;/\nhostgroup_name\s+HOSTGROUP ONE/s/\nmembers\s+/&'"${host}"', /
' printer.cfg
Не каждый процесс оболочки, только вход в систему оболочка создает новый сеанс (подробнее ниже ). Очевидно, что вначале сеанс имеет только одного члена — саму оболочку. Каждый новый разветвленный процесс автоматически принадлежит одному и тому же сеансу. Процесс может удалить себя из своего сеанса, создав новый с помощью setsid()
. У процесса нет другого способа изменить свою сессию.
Резюме:
session members = login shell AND all child processes (and their child processes, etc.) EXCEPT child processes that have created its own sessions
Остается вопрос, всегда ли все процессы, порожденные оболочкой, запускаются как «задания», то есть одна группа процессов на команду. Хотя это обычно верно, я не знаю наверняка для интерактивных оболочек -.
ОБНОВЛЕНИЕ
Этот вопрос касался bash
, но то же самое можно сказать и о других подобных оболочках, ориентированных на командную строку, с управлением заданиями.
Как указал @StéphaneChazelas, сеанс создается программой, которая управляет входом в систему на терминале или псевдотерминальном устройстве. Сессия строго привязана к своему терминалу.
Сначала пользователь должен войти в систему, и только после этого его или ее программа-оболочка может быть определена по соответствующей записи в файле passwd
.Эта программа оболочки получает exec
ed -PID остается прежним. Таким образом, сеанс создается внутри процесса, который становится оболочкой входа пользователя.