2015-09-05 89 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和關閉它去......