2015-10-02 2 views
0

У меня есть сценарий, который содержит следующее:Здесь строка SFTP Isnt правильно разбор символа новой строки

sftp [email protected]$3 <<< $"cd $4 \nput $5 \nbye" 

, который я прохожу переменный тоже время выполнения однако \n символов не отображаются как новые линии, но отображаются в виде открытого текста поэтому команда попытка к следующему:

sftp > cd $4\nput $5 \nbye 

, который, очевидно, является каталог, который не существует, как я могу сделать символы новой строки сохраняются?

if i dont параметризует команду, она отлично работает, например.

sftp [email protected] <<< $'cd dir\n put file\n bye' 

любые идеи?

Возможно, из-за пользователя ' vs " в скрипте?

+1

'$" ... "' используется для переводимых строк; нет эквивалента '$ '...'', который допускает расширение параметра. – chepner

+0

Вы можете использовать 'printf '% s \ n' 'cd $ 4" "положить $ 5" "bye" | stfp $ 2 @ $ 3' или 'stfp $ 2 @ $ 3 <<(printf '% s \ n'" cd $ 4 "" положить $ 5 "" bye ")'. –

ответ

3

Вы можете использовать HERE документ для достижения имитируя интерактивного ввода:

#!/bin/bash 

sftp [email protected]$3 << EOI 
cd $4 
put $5 
bye 
EOI 

См http://tldp.org/LDP/abs/html/here-docs.html для примеров и Using variables inside a bash heredoc для Gotcha.

+0

Он не * нуждается в *, чтобы использовать документ здесь, но он, безусловно, более читабельный (и переносимый), чем переполнение нескольких строк в одну строку. – chepner

+0

@chepner - хе, абсолютно, не нужно - это было всего лишь одно возможное решение. Почему-то я не хотел использовать слово _need_ - возможно, я чувствовал _needy _... – Raad

2

Может быть, это из-за пользователь "против" в сценарии

Да, кажется, так:

$ cat <<< $'foo\nbar' 
foo 
bar 

но

$ cat <<< $"foo\nbar" 
foo\nbar 

Я не уверен, что <<< и $'...' делают в bash, но для вашего приложения, вы ould рассмотрите возможность использования 'HERE document', как указано в another answer.

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