Как я могу заставить удар оценивать команду PM2, сохраненную в Переменной?

Я настраиваю конфигурацию сервера с облаком 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
1
задан 3 September 2017 в 10:06

1 ответ

Попробуйте любую из этих строк:

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
1
ответ дан 7 December 2019 в 15:30

Другие вопросы по тегам:

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