1

Привет.

ssh ufk@10.0.0.2  "bash -lc 'pm2 list | grep app | awk { print $3} '"

Мне нужно выполнить команду, которую я вставил сюда. проблема в том, что я уже дважды убегаю ... удар с " и 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 никогда не выполнялся.

2 ответа2

1

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

ssh ufk@10.0.0.2  "bash -lc \"pm2 list | grep app | awk '{ print \\\$3 }'\""

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

1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .