2013-06-17 3 views
3

Я пытаюсь сделать следующее:Как вывести символ новой строки в SSH

#!/bin/sh 
ssh [email protected] "echo \"Test \n for newline\"" 

это будет выглядеть:

test \n for newline 

Как получить оболочку, чтобы интерпретировать \n как фактический перевод строки?

+0

'echo' запрещает толкование восьмеричные по умолчанию. – devnull

+0

Возможный дубликат [Как я могу создать новую строку в строке в sh?] (Http://stackoverflow.com/questions/3005963/how-can-i-have-a-newline-in-a-string-in -sh) – devnull

+0

Обратите внимание, что принятый ответ для связанного дубликата относится к 'bash'. – chepner

ответ

4

Попробуйте использовать опцию -e, например, echo -e "Test \n for newline".

Если у вашего echo нет опции -e, тогда я бы использовал printf. Он широко доступен, и в его реализациях не так много вариаций.

+0

это не работает. Страница «man» говорит «-n Не печатать конечный символ новой строки». Это единственный вариант, который у меня есть. В описании в начале говорится: «Утилита echo записывает любые заданные операнды, разделенные одиночными символами' ('') 'и сопровождаются символом новой строки' ('\ n ')', на стандартный вывод." –

+0

Если у вашего' echo' нет опции '-e', то я бы использовал' printf'. Он широко доступен, и в его реализациях почти не так много вариаций. – cmt

+0

большое спасибо! Не думай об этом. –

2

Для большей переносимости используйте printf вместо echo.

#!/bin/sh 
ssh [email protected] 'printf "Test \n for newline"' 

В соответствии со стандартом POSIX, echo должен обрабатывать \n в качестве символа новой строки. bash встроенный echo не включает, если вы не указали опцию -e.

1

Просто используйте один из

#!/bin/sh 
ssh [email protected] "echo -e \"Test \n for newline\"" 

или

#!/bin/sh 
ssh [email protected] 'echo -e "Test \n for newline"' 

или

#!/bin/sh 
ssh [email protected] "echo -e 'Test \n for newline'" 

или даже

#!/bin/sh 
ssh [email protected] "echo 'Test 
for newline'" 

Все из них будет отображаться

Test 
for newline 

(обратите внимание на замыкающем пробел после первой строки и ведущего место перед второй - я просто скопировал свой код)

0

Перед exectuning обновления команды SSH среды IFS переменная с новым символом строки.

IFS='         
' 

магазин вывод команды SSH к Название переменной

CMD_OUTPUT=$(ssh [email protected] 'cat /proc/meminfo') 

итерацию выход на линию

for s in $CMD_OUTPUT; do echo "$s"; done 
Смежные вопросы