这里字符串SFTP没有正确解析换行符

时间:2015-10-02 13:55:36

标签: bash

我有一个包含以下内容的脚本:

sftp $2@$3 <<< $"cd $4 \nput $5 \nbye"

我在运行时也传递了变量,但是\n字符不会呈现为新行,而是呈现为纯文本,因此命令会尝试执行以下操作:

sftp > cd $4\nput $5 \nbye

这显然是一个不存在的目录,如何使新行字符保持不变?

如果我不参数化该命令它工作正常,例如。

sftp user@host <<< $'cd dir\n put file\n bye'

任何想法?

可能是脚本中' vs "的用户?

2 个答案:

答案 0 :(得分:3)

您可以使用HERE文档来模仿交互式输入:

#!/bin/bash

sftp $2@$3 << EOI
cd $4
put $5
bye
EOI

有关示例,请参阅http://tldp.org/LDP/abs/html/here-docs.html;有关问题,请参阅Using variables inside a bash heredoc

答案 1 :(得分:2)

  

也许是因为脚本中的'vs'用户?

是的,情况似乎如此:

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

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

我不确定bash中<<<$'...'做了什么,但对于您的应用,您应该考虑使用'HERE document'中提到的another answer