我正在自动执行一个ftp会话,但我想要把stdout和管道文件。我想出了3个选项:使用内联<< EOF ... EOF时,我在哪里进行管道归档?
选项1
ftp -i ftpServer >stdoutFile <<EOF
cd somewhere
get something
EOF
选项2
ftp -i ftpServer <<EOF >stdoutFile
cd somewhere
get something
EOF
选项3
ftp -i ftpServer <<EOF
cd somewhere
get something
EOF > stdoutFile
我似乎正在接受所有这些语法错误,而且他们似乎都没有工作。
我觉得我以前有过这样的工作,但我不记得如何。
编辑
的语法错误仍然存在。看起来好像是我用这个文件标题为EOF的方法来使用这个方法,我不能在脚本的其他地方使用这个分隔符 - 很奇怪。
产生的确切错误实际上是下一个if语句终止时的失败。例如:
if [ condition ]
then
ftp -i ftpServer >stdoutFile <<EOF
cd somewhere
get something
EOF
fi
if [ something else ]
then
somethingWithaHereDoc <<EOF
foo
bar
EOF
fi
我得到Syntax error near unexpected token 'fi'
指向最后fi的行。
FTP连接现在挂起。我正在使用〜/ .bashrc文件,它在另一个控制台中工作,但不在脚本中。我不小心在目录中有一个命名管道,导致ftp会话挂起。现在全部解决。谢谢!
我这样做的原因是因为我想从ftp服务器上下载特定的文件。我列出目录内容,退出ftp会话并以bash处理它,然后启动另一个ftp会话来获取我选择的文件。
选项1和2都应该工作。 –
请显示您正在获取的语法错误和上下文。选项3肯定会失败,但前两项应该没问题。 – cdarke
你上面的第一个和第二个选项是正确的,但是你的'EOF'必须是唯一的一行:没有前导标签或空格,也没有尾随垃圾。你看到的问题是bash不认识终结者。 – gilez