Как удаленно редактировать строку, содержащую двойные кавычки и переменные, используя sed через ssh? - PullRequest
0 голосов
/ 05 октября 2011

У меня есть команда sed, которая отлично работает, если я запускаю ее локально в Ubuntu или на нашем встроенном клиенте Arago:

sed -i 's/export PART="$1"/export PART="A"/' flash.sh

Это приводит именно к тому, что мне нужно в обеих версиях sed,строка, которая изменяется:

export PART="$1"

на

export PART="A"

Моя проблема в том, что мне нужно выполнить ту же команду по сети для встроенного клиента, поэтому я попробовал это на сервере Ubuntuиспользуя bash, клиенту Arago, используя sh:

ssh -n -o stricthostkeychecking=no root@10.14.150.113 sed -i 's/PART="$1"/PART="A"/' flash.sh

, что приводит к строке, содержащей:

export PART=A"$1"

Команда подстановки должна оставаться внутри одинарных кавычек, поэтому двойные кавычкипередаются как литералы, или, может быть, есть лучший способ сохранить двойные кавычки в двух строках?Мне кажется, что $1 просто игнорируется, как будто он пустой, а "A" передается как A и заменяет конец PART=.Я попытался заключить команду в одинарные и двойные кавычки, которые оба приводят к одному и тому же.Я также пытался избежать кавычек с обратной косой чертой, тот же результат.Я думаю, что это что-то с расширением цитаты с sh, что я просто не понимаю.Или, возможно, что-то, чего я не понимаю с помощью ssh.

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

Ответы [ 2 ]

1 голос
/ 06 октября 2011
ssh -n -o stricthostkeychecking=no root@10.14.150.113 'sed -i "s/export PART=\"\\\$1\"/export PART=\"A\"/" flash.sh'
0 голосов
/ 06 октября 2011

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

ssh -n -o stricthostkeychecking=no root@10.14.150.113 sed -i 's/PART='"$1"'/PART="A"/' flash.sh
# -------------------------------------------------------------------^^^^^^

ИЛИ, если вам действительно нужно значение $ 1 в окружении кавычек dbl,

ssh -n -o stricthostkeychecking=no root@10.14.150.113 sed -i 's/PART='\"$1\"'/PART="A"/' flash.sh
# -------------------------------------------------------------------^^^^^^^^

Вы хотите, чтобы $ 1 пришел с вашего локального компьютера (не ssh 'd to machine), верно?

Надеюсь, это поможет.

PS, поскольку вы выглядите новым пользователем, если вы получите ответ, который поможет вам, не забудьте пометить его как принятый,и / или дайте ему + (или -) в качестве полезного ответа.

...