在 Makefile 中包含一些 SFTP 命令

问题描述 投票:0回答:2

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

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”是在本地执行的,而不是远程执行的。

command-line makefile sftp
2个回答
2
投票

几个想法:

  • 使用 ncftp,每个 Linux 发行版以及 brew 都应该有:它会记住“状态”,因此
    cd
    变得不必要
  • 如果可能,请使用
    scp
    代替
    sftp
  • 编写一个简单的 shell 脚本来执行 EOF 业务并调用它

就其价值而言,这是我将 tarball 推送到 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
然后就开始了......


1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.