Мне никогда не везло с абстрактными конфигурациями, в основном из-за моей настройки 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 и т. Д.), Вы можете взять соответствующие строки из сценариев дистрибутива и добавить их в свой файл.
env -i "$BASH" -c 'your code here'
Iniciaría un nuevo intérprete bash
para interpretar your code here
en 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 -i
tampoco heredaría las variables y funciones exportadas (definidas por la llamada bash
o 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 '' INT
en la persona que llama también haría que SIGINT se ignorara en el destinatario de la llamada ).
El comando env
con la bandera -i
crea un entorno vacío
% env -i /bin/env
%
Ahora bash
creará un conjunto de variables, pero estas no se heredan; eso es solo bash
serbash
% 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