Выбросы кавычек Bash

116
8

Я выполняю некоторые команды на экране через SSH. Это прекрасно работает:

ssh myuser@mydomain.com "screen -list; screen -r -d -X -S myscreen stuff $'echo here\n'"

Но теперь вместо того, чтобы эхо, я пытаюсь запустить команду sed, которая содержит двойные кавычки.

sed -i -r "s/(    host: )(\w+)/\1test/" file.yml

Двойные кавычки вызывают bash: синтаксическая ошибка около неожиданного токена 'database_name:'

Как правильно избежать двойных кавычек, необходимых для sed?

спросил(а) 2021-01-25T18:12:52+03:00 4 месяца, 3 недели назад
1
Решение
98

Я нашел самый простой способ сделать это, разбив его на две команды.

Сначала отправьте команду на экран. Побег любых двойных кавычек в команде stuff с обратной косой чертой.

ssh myuser@mydomain.com 'screen -list; screen -r -d -X -S myscreen stuff "sed -i -r \"s/(    host: )(\w+)/\1test/\"" file.yml'
└────────────────────────────────────────────────────────────────────────────────────────────┘
└──────────────────────────────────────┘

Затем отправьте ответ, чтобы выполнить команду. Обратите внимание на $, который заставляет его выполнить.

ssh myuser@mydomain.com "screen -list; screen -r -d -X -S myscreen stuff $'\n'"
└─────────────────────────────────────────────────┘
└──┘

ответил(а) 2021-01-25T18:12:52+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема