Почему источник не работает, когда я называю удар-c

Необходимо просто деинсталлировать более старые версии. Обычно нет никакой потребности сохранить больше чем один (рабочая версия) вне того, что Вы выполняете теперь.

Удостоверьтесь, что Вы проверяете сначала (с uname) если бы Вы на самом деле перезагрузили после последнего обновления (для последней версии, 3.2.0-56, который был бы сегодня) и выполняют последнюю версию. И если Вы удаляете все, но не включая 3.2.0.55.

При выполнении более старой версии необходимо смочь удалить все версии за исключением той, которая работает и последний (3.2.0.56), другие никогда не будут запускаться на перезагрузке, если Вы не сделали бы так вручную. И для резервного копирования Вы сохраняете свой ток, работу, ядро.

2
09.06.2014, 00:19
3 ответа

Вы должны избежать знака доллара $ в вашей первой команде, иначе bash раскроет его до выполнения вашей команды:

$ bash -c "source test.env && echo \$test"

или вы должны использовать единственную кавычку вместо двойной:

$ bash -c 'source test.env && echo $test'
5
27.01.2020, 21:54

Если цель состоит только в том, чтобы обработать настройку 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
1
27.01.2020, 21:54

Как написано, оболочка расширяет $ test перед передачей вашей команде. Вы можете предотвратить это, используя ' вместо ".

bash -c 'source test.env && echo $test'
0
27.01.2020, 21:54

Теги

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