2015-09-05 52 views
0

我使用Makefile创建了我正在处理的论文的pdf。我也想用make将最新版本上传到我的网站,这需要sftp。不过,我觉得我可以做这样的事情(这在命令行上的话),但它似乎在时许,EOF是越来越忽视,即,这在Makefile中包含一些SFTP命令

website: 
    sftp -oPort=2222 [email protected] << EOF 
    cd papers 
    put research_paper.pdf 
    EOF 

产生错误消息

cd papers 
/bin/sh: line 0: cd: papers: No such file or directory 

这我认为你的本地机器上不存在“论文”,即'cd'在本地执行,而不是远程执行。

回答

1

你不能(正常)把一个命令就在制作配方多行,所以这里的文件是一个不走。试试这个:

website: research_paper.pdf 
    printf 'cd papers\nput $<\n' \ 
    | sftp -oPort=2222 [email protected] 

目标显然取决于PDF,因此我也将它作为一个明确的依赖关系。

2

夫妇的想法:

  • 使用ncftp其中每一个Linux发行版,以及BREW应具备:它会记住“状态”,使cd变得不必要
  • 使用scp代替sftp如果可能的话
  • 写一个简单的外壳脚本做EOF业务,并呼吁

它是值得的,这里是我的脚本,用于将压缩包推送到CRAN winbuilder - 并以目标目录和脚本作为参数ncftpput

#!/bin/bash 

function errorexit() { 
    echo "Error: $1" 
    exit 1 
} 

if [ "$#" -lt 1 ]; then 
    errorexit "Need to specify argument file" 
fi 

if [ ! -f ${1} ]; then 
    errorexit "File ${1} not found, aborting." 
fi 

ncftpput win-builder.r-project.org /R-release ${1} 
ncftpput win-builder.r-project.org /R-devel ${1} 

然后我只是做wbput.sh foo_1.2-3.tar.gz和关闭它去......