在 Makefile 中包含一些 SFTP 命令

Including some SFTP commands in a Makefile

我使用 Makefile 来创建我正在处理的论文的 pdf 文件。我还想使用 make 将最新版本上传到我的网站,这需要 sftp。我虽然我可以做这样的事情(命令行上的单词)但似乎在 make 中,EOF 被忽略了,即 this

website:
    sftp -oPort=2222 me@mywebsite.com << EOF
    cd papers
    put research_paper.pdf
    EOF

生成一条错误消息

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

我认为是说 "papers" 在您的本地计算机上不存在,即 'cd' 正在本地执行,而不是远程执行。

几个想法:

  • 使用每个 Linux 发行版和 brew 都应该有的 ncftp:它会记住 'state' 所以 cd 变得不必要
  • 尽可能使用 scp 而不是 sftp
  • 编写一个简单的 shell 脚本来处理 EOF 业务并调用它

对于它的价值,这是我将 tarball 推送到 CRAN winbuilder 的脚本——并将目标目录和脚本作为 ncftpput.

的参数
#!/bin/bash

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

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

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

ncftpput win-builder.r-project.org /R-release 
ncftpput win-builder.r-project.org /R-devel 

然后我就做 wbput.sh foo_1.2-3.tar.gz 然后就可以了...

您不能(通常)在 Make 配方中将单个命令放在多行中,因此这里的文档是不行的。试试这个:

website: research_paper.pdf
    printf 'cd papers\nput $<\n' \
    | sftp -oPort=2222 me@mywebsite.com

目标显然依赖于 PDF,所以我也将其设为显式依赖。