обновлять

обновлять

Привет.

ssh [email protected]  "bash -lc 'pm2 list | grep app | awk { print $3} '"

Мне нужно выполнить команду, которую я сюда вставил. Проблема в том, что я уже дважды экранирую... bash с помощью "и pm2 с помощью '. Как мне экранировать awk?

Я знаю, что это сработает, если я экранирую его с помощью awk '{ print $3 }', но команда all уже экранирована дважды... так что... что мне делать?

обновлять

Я создал следующую команду bash:

PM2_APP_ID=`$REMOTE_SRV_SSH_COMMAND "bash -lc \"pm2 list | grep app | grep -v 'pm2 show' | awk '{ print \\\$4 }'\""`;

здесь я получаю все строки, соответствующие списку pm2, как будто awk никогда не выполнялся.

решение1

Вы не можете экранировать одинарные кавычки с помощью обратного слэша внутри строк в одинарных кавычках, но вы можете экранировать двойные кавычки с помощью обратного слэша внутри строки в двойных кавычках. Так что вы можете сделать так:

ssh [email protected]  "bash -lc \"pm2 list | grep app | awk '{ print \\\$3 }'\""

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

решение2

спасибо @dave_thompson_085 за ваш комментарий, он помог мне решить проблему.

Я использую следующую команду:

PM2_APP_ID=`$REMOTE_SRV_SSH_COMMAND "bash -lc 'pm2 list'" | grep app | grep -v 'pm2 show' | awk '{ print $4 }'`;

как вы можете видеть, я использую список pm2 на сервере удаления, а все остальное я делаю локально. никаких проблем с экранированием вещей, и все работает правильно.

Связанный контент