【问题标题】:Set directory of files created by a shell script?设置由 shell 脚本创建的文件目录?
【发布时间】:2010-08-18 08:47:26
【问题描述】:

编辑:不得不重新标记这个,因为它是一个 Sweave / R 问题,因为这个脚本的问题是 Sweave 代码的输出目录。 R CMD Sweave 有对应的选项吗?

我有一个从 .Rnw 文件创建 .tex 文件的 shell 脚本。该文件需要进一步处理,但脚本找不到,因为它以某种方式自动生成到我的主目录。

我需要在 .Rnw 文件的文件夹中生成 .tex 文件(因为所有其他信息都在那里)。请注意,.Rnw 文件是通常使用文件选择器选择的文件。

附带问题:是否有一个选择文件的选项,类似于 Java 中的 JFileChooser,只允许选择某些文件?

代码如下:

#!/bin/bash

myfile=$(/usr/bin/osascript << EOT
tell app "AppleScript Runner"
activate
    return posix path of (choose file)
    end
    EOT)

    if [ $? -eq 0 ]
    then
        R CMD Sweave $myfile
        no_ext="${myfile%.*}"
        /usr/local/texlive/2009/bin/universal-darwin/pdflatex $no_ext.tex
        open $no_ext.pdf
        else
            echo "User canceled"
            fi

感谢所有帮助编写此初始脚本的人!

【问题讨论】:

  • 这对于昨天建议的 Platypus 的使用也很重要,因为使用该工具创建的应用程序默认将 .tex 文件保存到应用程序包文件夹中,这也不是最佳的。

标签: shell sweave


【解决方案1】:

dirname 可用于获取文件的目录名称,或者您可以使用与之前对扩展名所做的相同类型的替换替换为 /

filedir="${no_ext%/*}"
/usr/local/texlive/2009/bin/universal-darwin/pdflatex -output-directory "$filedir" "$no_ext.tex"

【讨论】:

  • 谢谢,看来我不知道 pdflatex 的输出目录选项 :)