Я настраиваю конфигурацию сервера с облаком init и выполняю команды один за другим в файле конфигурации.
Одна из команд, которые я должен выполнить для установки среды моего сервера, является PM2 для хранения приложения для сервера узла онлайн после перезагрузки. Я могу иметь PM2, производит специальную команду, я должен выполнить и храню ту команду в переменной для выполнения в следующей строке.
Команда 1: (Хранение вывода)
pm2response=$(pm2 startup systemd)
Команда 2: (Выполнение команды ответа и обрезка дополнительного входа)
${pm2response#*Execute the following command:}
Когда я выполняю Команду 2 в своем сервере детской площадки, она производит ошибку
[PM2][ERROR] Init system not found
Я не понимаю, почему я не могу сохранить вывод команды в переменной и выполнить переменную. Я вручную скопировал точную команду, я должен столкнуться с консолью и успешно выполнил ее. Это просто хранит его в переменной, которая не работает.
Управляйте, чтобы я выполнился как переменная: (Это работает успешно),
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username
Управляйте, чтобы я пытался выполниться как переменная: (Имеет ошибки),
var='sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username'
$var
Почему это не будет работать?
Я заставил $var работать с помощью двойных кавычек в моем сервере.
var="sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username"
$var #works!
Хотя это - просто пример, я тестировал в сервере детской площадки. Для ясности вопроса я действительно пытаюсь оценить Команду 2:
${pm2response#*Execute the following command:}
Ссылка для Команды 2: я использую замену параметра оболочки, таким образом, я могу удалить вход. Это - вывод без замены параметра оболочки.
echo $pm2response
: (произведет),
[PM2] Init System found: systemd [PM2] You have to run this command as root. Execute the following command: sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username
Таким образом путем добавления замены параметра оболочки,
echo ${pm2response#*Execute the following command:}
: (произведет),
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username
Попробуйте любую из этих строк:
var="sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username"
$var
var1=$("sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username")
$var1
ошибка на той, которую Вы использовали, происходит, потому что выражения не расширяются в одинарных кавычках, используйте двойные кавычки для этого:
var='sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u username --hp /home/username'
$var