Баш цитирует веселье - PullRequest
1 голос
/ 10 марта 2011

У меня есть код:

sudo_cmd="echo -e \\"$cmd\\" >> $CACHE_CONF"
echo "$sudo_cmd"

, которая печатает строку:

echo -e "K1 = 'memcached: // host /' \ nK2 = 'memcached: // host /' \ n ">> /opt/settings.py

, который отлично работает, если я выполню его в оболочке, вот результат settings.py :

K1 = 'memcached://host/'
K2 = 'memcached://host/'

Однако, когда я выполняю эту команду через ssh:

ssh $user@$host "sudo sh -c \"$sudo_cmd\"

результат в settings.py отличается:

K1 = memcached: // host / nK2 = Memcached: // хост / п

Несмотря на параметр -e для echo , перевод строки не работает.

Что я делаю не так?

Обновление:

str="a\nb"
cat >> settings.py <<< "$str"

тоже не работает.

Ответы [ 3 ]

1 голос
/ 10 марта 2011

Ваша проблема с вашими побегами.

Предполагая, что

cmd="K1 = 'memcached://host/'\\nK2 = 'memcached://host/'\\n"

Тогда ваше назначение sudo_cmd должно быть

sudo_cmd="echo -e \\\"$cmd\\\" >> $CACHE_CONF"

Обратите внимание на дополнительный обратный слеш, экранирующий кавычки.

0 голосов
/ 10 марта 2011

\ в \n обрабатывается оболочкой, в которой работает ssh. Либо используйте heredoc / herestring с cat, либо усложните цитирование.

cmd=$'...\n...'
ssh ... "cat >> $CACHE_CONF" <<< "$cmd"
0 голосов
/ 10 марта 2011

Вам нужно снова экранировать \ n в строке $ cmd, так что это будет \ n, тогда это будет правильно перенесено на новую строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...