Необходимо просто деинсталлировать более старые версии. Обычно нет никакой потребности сохранить больше чем один (рабочая версия) вне того, что Вы выполняете теперь.
Удостоверьтесь, что Вы проверяете сначала (с uname
) если бы Вы на самом деле перезагрузили после последнего обновления (для последней версии, 3.2.0-56, который был бы сегодня) и выполняют последнюю версию. И если Вы удаляете все, но не включая 3.2.0.55.
При выполнении более старой версии необходимо смочь удалить все версии за исключением той, которая работает и последний (3.2.0.56), другие никогда не будут запускаться на перезагрузке, если Вы не сделали бы так вручную. И для резервного копирования Вы сохраняете свой ток, работу, ядро.
Вы должны избежать знака доллара $
в вашей первой команде, иначе bash
раскроет его до выполнения вашей команды:
$ bash -c "source test.env && echo \$test"
или вы должны использовать единственную кавычку вместо двойной:
$ bash -c 'source test.env && echo $test'
Если цель состоит только в том, чтобы обработать настройку ENV
перед запуском процесса и избежать воздействия на текущую оболочку, тогда exec
с ] bash
может быть не самым эффективным способом решить эту проблему.
( . /dev/fd/4 && echo "$i" ) 4<<\SCRIPT
i='i is set here in the subshell'
#END
SCRIPT
echo ${i?but i isnt set here because it was set in the subshell}
i is set here in the subshell
sh: line 5: i: but i isnt set here because it was set in the subshell
Вы, конечно, можете заменить ссылку на файловый дескриптор heredoc на обычный файл - я просто использовал его, чтобы продемонстрировать это.
Но если вы выполняете exec
внешний процесс - такой как bash
или любой другой - а не встроенную оболочку, то подоболочка вам не нужна.
one=1 two=2 \
bash -c 'echo "${cmd=This is command #}$one"
echo "${cmd}$two"'
echo "${one?this var was only set for the execed ENV}"
This is command #1
This is command #2
sh: line 2: one: this var was only set for the execed ENV
И если этот внешний процесс является bash
или любой другой оболочкой, соответствующей стандарту POSIX, принимающей -s
tdin по умолчанию, вы можете просто написать ваш сценарий прямо в файл | pipe
...
{ echo PS1=
echo 'echo "$PS1"'
cat /etc/skel/.bashrc
echo 'echo "$PS1"'
} | bash
echo "${PS1:?unset here again}"
#blank line from first echo
[\u@\h \W]\$
sh: line 7: PS1: unset here again
Как написано, оболочка расширяет $ test
перед передачей вашей команде. Вы можете предотвратить это, используя '
вместо "
.
bash -c 'source test.env && echo $test'