2015-09-29 5 views
1

Рассмотрим следующую команду:команда Sed не работает через SSH

ssh MACHINE sed -i 's#\[ "\$JBOSS_MODE" = "standalone" \]#\[ "\$JBOSS_MODE" = "sim_standalone" \]#' /tmp/sim-wildfly 

Когда я запускаю эту команду из командной строки, я получаю эту ошибку:

sed: -e expression #1, char 3: unterminated `s' command 

Однако, когда я SSH в том, что частности машина первая, а затем запустить sed часть команды, он отлично работает:

> ssh MACHINE 
> sed -i 's#\[ "\$JBOSS_MODE" = "standalone" \]#\[ "\$JBOSS_MODE" = "sim_standalone" \]#' /tmp/sim-wildfly 

Любой идея, почему это произойдет?

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

ответ

2

Попробуйте ssh с здесь-доком, чтобы избежать сумасшедшего вытекания:

ssh -t -t MACHINE <<'EOF' 
sed -i 's#\[ "\$JBOSS_MODE" = "standalone" \]#\[ "\$JBOSS_MODE" = "sim_standalone" \]#' /tmp/sim-wildfly 
exit 
EOF 
+1

Это, оказалось, пространство, но это хорошее предложение! Я попробую. –

+0

Он работает, но я получаю это сообщение: «Псевдо-терминал не будет выделен, потому что stdin не является терминалом». Есть ли способ избавиться от этого? –

+0

А вам нужен один «выход» в конце. См. Обновленный ответ. – anubhava

Смежные вопросы