我有一个包含以下内容的脚本:
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 "
的用户?
答案 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。