В,
cmd="bash -c 'echo hello'"
$cmd
Вы не выполняете команду bash -c 'echo hello'
, вы выполняете команду $ cmd
простая команда.
Этот некотируемый $ cmd
означает вызов оператора split + glob. Здесь со значением по умолчанию $ IFS
, содержимое $ cmd
разбивается на bash
, -c
, "эхо
и привет"
. Итак, вы запускаете bash
с этими 4 аргументами, это как если бы вы набрали:
bash -c "'echo" "hello'"
И в этом коде 'echo
отсутствует заключительная кавычка ( привет '
аргумент входит в $ 0
этого встроенного скрипта).
Если вы хотите оценить содержимое $ cmd
как код оболочки, это
eval "$cmd"
Итак:
cmd="bash -c 'echo hello'"
foo=$(eval "$cmd")
echo "$foo"
Хотя вы также можете использовать оператор split + glob по-другому:
cmd='bash,-c,echo hello'
IFS=, # split on comma
set -f # disable glob
foo=$($cmd)
echo "$foo"
Пакет глючит. Вы можете установить его из бэкпортов .
apt install -t stretch-backports openntpd
Вы можете сообщить об ошибке в Debian:Как сообщить об ошибке в Debian с помощью reportbug .