我使用 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”是在本地执行的,而不是远程执行的。
几个想法:
cd
变得不必要scp
代替 sftp
就其价值而言,这是我将 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
然后就开始了......
您不能(通常)将单个命令放在 Make 配方中的多行中,因此此处的文档是不行的。试试这个:
website: research_paper.pdf
printf 'cd papers\nput $<\n' \
| sftp -oPort=2222 [email protected]
目标显然依赖于 PDF,所以我也将其设置为显式依赖项。