【问题标题】:Including some SFTP commands in a Makefile在 Makefile 中包含一些 SFTP 命令
【发布时间】:2015-09-05 12:02:02
【问题描述】:

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

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

我认为这是说“论文”在您的本地计算机上不存在,即“cd”正在本地执行,而不是远程执行。

【问题讨论】:

    标签: command-line makefile sftp


    【解决方案1】:

    几个想法:

    • 使用每个 Linux 发行版和 brew 都应该有的 ncftp:它会记住“状态”,所以 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 就可以了...

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-18
        • 1970-01-01
        相关资源
        最近更新 更多