以下在Mac OS X上运行正常:
#!/bin/bash
R CMD Sweave myfile.Rnw
pdflatex myfile.tex
open myfile.pdf
现在,我意识到这3行代码对我的工作非常有帮助 - 与某些特定文件无关。因此,我想将该文件用作参数。我知道如何使用一个参数本身,但是在字符串之后拆分输入并在之后连接它时会出现问题。如果我能够将文件名参数拆分为:
split($1,".") # return some array or list ("name","ext")
或者是否有比在shell脚本中使用Python更简单,完全不同的方式?
提前获取任何一般性建议和示例!
答案 0 :(得分:6)
我在python中执行所有shell脚本编写 它更容易阅读,更强大,也适用于Windows。
答案 1 :(得分:6)
您可以将基本名称作为参数,并使用$1.Rnw
,$1.tex
和$1.pdf
。 Python非常适合shell脚本,但我通常坚持使用bash来处理不到10行的事情。
如果您确实想要获取文件名,可以使用cut -f 1 -d '.' $1
。
答案 2 :(得分:2)
Python one liner应该是:
python -c "print '$1'.split('.')[0]"
但Nathon的想法是“使用基本名称作为参数。”恕我直言是最好的解决方案。
修改强>
使用“反引号”来使用程序放在标准输出上的文本,如下所示:
eike@lixie:~> FOO="test.foo"
eike@lixie:~> BAR=`python -c "print '$FOO'.split('.')[0]"`
eike@lixie:~> echo $BAR
这应该导致:
test
答案 3 :(得分:1)
我同意Gerald关于使用Makefiles的建议,但他的缺点评论(每个项目的专用makefile)并不完全正确,因为Makefile可以变得更通用。
用$ @替换$(FILE),然后用“make foo”调用。
我将此作为对杰拉尔德答案的评论,但没有必要这样做。
答案 4 :(得分:0)
Python当然是shell脚本的一个很好的选择,但是对于一个简单的例子,因为你使用bash更容易。再次,为了编译LaTeX,我建议使用makefile并使用GNU make。如果你还没有听说过,你可以这样做:
FILE = your_tex_filename
INCLUDES = preface.tex introduction.tex framework.tex abbreviations.tex
all: $(FILE).pdf
$(FILE).pdf: $(FILE).tex $(INCLUDES) $(FILE).aux index bibliography
pdflatex $(FILE).tex
index: $(FILE).tex
makeindex $(FILE).idx
bibliography: $(FILE).bib $(FILE).aux
bibtex $(FILE)
$(FILE).aux: $(FILE).tex
pdflatex $(FILE).tex
# bbl and blg contain the bibliography
# idx and ind contain the index
.PHONY : clean
clean:
rm *.aux *.bak $(FILE).bbl $(FILE).blg \
*.flc *.idx *.ind *.log *.lof *.lot *.toc core \
*.backup *.ilg *.out *~
然后只需编译源文档w /
make
或建成后清理
make clean
缺点是你需要为你的每个项目提供一个专用的makefile,但是有一个不是很大问题的模板。 HTH
PS:可以在http://www.faqs.org/docs/abs/HTML/string-manipulation.html找到对bash shell进行字符串操作的精彩介绍。