Изолированные подоболочки в bash

Мне никогда не везло с абстрактными конфигурациями, в основном из-за моей настройки lvm + mdadm и отсутствия обновления ядра. "путь дистрибутива". К счастью, вы можете отказаться от всего этого и создать собственный grub.cfg , очень похожий на то, как работал menu.lst .

Пример grub.cfg , взятый из моего:

set timeout=15

menuentry 'Linux 3.10.17 (sde) kernel-3.10.17-g' {
  root=hd0,1
  linux /boot/kernel-3.10.17-g domdadm dolvm root=/dev/md3
  initrd /boot/initrd-3.10.17-g
}

menuentry 'Linux 3.10.17 (sdf) kernel-3.10.17-g' {
  root=hd1,1
  linux /boot/kernel-3.10.17-g domdadm dolvm root=/dev/md3
  initrd /boot/initrd-3.10.17-g
}

Самым большим отличием от grub-legacy является то, как указывается root = , пункт меню и изменение ключевого слова с kernel на linux , чтобы указать ядро. Если у вас есть menu.lst , который вам подходит, вы можете легко адаптировать его для работы как grub.cfg , исправив эти изменения. Если вам нужны какие-либо дополнительные функции grub2 (загрузка модулей grub и т. Д.), Вы можете взять соответствующие строки из сценариев дистрибутива и добавить их в свой файл.

0
29.05.2018, 02:25
2 ответа
env -i "$BASH" -c 'your code here'

Iniciaría un nuevo intérprete bashpara interpretar your code hereen un entorno inicialmente vacío.

Como es una nueva instancia bash, no heredaría los alias, parámetros posicionales, variables no exportadas, funciones.

Con env -itampoco heredaría las variables y funciones exportadas (definidas por la llamada basho posiblemente heredadas de antes ).

Todavía heredaría algunos otros tipos de atributos que se conservan a través de la bifurcación y la ejecución de comandos como umask, descriptores de archivos abiertos sin el cierre -en -bandera exec, límites, algunas disposiciones de señal (como un trap '' INTen la persona que llama también haría que SIGINT se ignorara en el destinatario de la llamada ).

3
28.01.2020, 02:23

El comando envcon la bandera -icrea un entorno vacío

% env -i /bin/env
%

Ahora bashcreará un conjunto de variables, pero estas no se heredan; eso es solo bashserbash

% env -i /bin/bash -c set
BASH=/bin/bash  
BASHOPTS=cmdhist:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_EXECUTION_STRING=set
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.2.46(2)-release'
DIRSTACK=()
EUID=1000
GROUPS=()
HOSTNAME=myhost.local
HOSTTYPE=x86_64
IFS=$' \t\n'
MACHTYPE=x86_64-redhat-linux-gnu
OPTERR=1                          
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/bin:/usr/bin
PPID=12003
PS4='+ '
PWD=/tmp
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments
SHLVL=1
TERM=dumb
UID=1000
_=/bin/bash

Diferentes shells crearán diferentes variables; por ejemplo, ksh93 y csh:

% env -i /bin/ksh -c set
ENV=.sh.ENV
FCEDIT=ed
HISTCMD=0
IFS=$' \t\n'
JOBMAX=0
KSH_VERSION=.sh.version
LINENO=1
MAILCHECK=600
OPTIND=1
PPID=12003
PS2='> '
PS3='#? '
PS4='+ '
PWD=/tmp
RANDOM=12790
SECONDS=0.000
SHELL=/bin/sh
SHLVL=1
TMOUT=0

% env -i /bin/csh -c set
argv    ()
cwd     /tmp
path    (/usr/bin /bin /usr/local/bin)
shell   /bin/csh
status  0

% env -i /bin/csh -c setenv
PWD=/tmp
1
28.01.2020, 02:23

Теги

Похожие вопросы