如何让Bash脚本引用本地文件

时间:2019-01-31 18:52:20

标签: bash applescript partial-application

我的具体问题

我的目标是提供一个命令行实用程序,用于将PowerPoint文件转换为PDF。我尝试过使用unoconv的解决方案,但是它们不能正确进行转换。我找到了一个不错的workflow,并另存为export_pdf.workflow。我可以从终端在文件上运行它:

/usr/bin/automator -i  <some_pptx_file> export_pdf.workflow

这是我想要的。

我想将其制作为Shell脚本,但是问题是知道将工作流放在哪里。我包括了用法字符串(不是真正的MWE)是为了帮助表达意图。

#!/usr/bin/env bash

function usage()
{
        cat <<HEREDOC
        Usage: $progname [--delete] PPTX_FILENAME

        Converts PPTX_FILENAME into a PDF by launching PowerPoint.
        PDF is produced in same directory as PPTX_FILENAME.

        optional arguments:
          -h, --help      show this help and exit
HEREDOC
}

while true; do
        case "$1" in 
                -h | --help ) usage; exit; ;;
                -- ) # end argument parsing
                        shift; break;;  
                * ) break;; 
        esac
done

# This is the line I have a question about
/usr/bin/automator -i  $1 export_pdf.workflow

这很好,提供,我从包含export_pdf.workflow的目录中运行它。理想情况下,我希望将其分发到一个二进制文件中,但是我不认为我也不应将export_pdf.workflow之类的不可执行文件也移到bin目录中。

在这种情况下不起作用的解决方案(或者至少我正在寻找更好的解决方案!)

  • 提供绝对路径:这将在我的计算机上工作,但是如果我尝试分发给其他人则不行
  • export_pdf.workflow上放置一个Shebang并使其可执行:以Apple的真正方式,这实际上是一个目录,而不仅仅是传递给Automator的单个文件。

一般问题

除了我的特定用例之外,我要解决的问题是我有一个带有许多参数的文件,并且有一个用例,其中我想提供一些文件作为参数默认情况下(例如,我一直想指定一个配置文件)。

在哪里放置some_local_file(在脚本本地,而不是在文件执行的地方)的“正确”或“可接受”位置,以便我可以将以下脚本放在/usr/local/bin/或将包含目录添加到路径:

#!/usr/bin/env bash
some_program -c some_local_file $1

1 个答案:

答案 0 :(得分:0)

我建议将您的脚本 some_local_file 放在同一文件夹中。 SCRIPTPATH可以在您的脚本中定义:

#!/usr/bin/env bash

SCRIPTPATH=$(dirname "$0")
LOCALFILE="$SCRIPTPATH/some_local_file"

some_program -c "$LOCALFILE" "$1"

此外,我不会将脚本和文件放在/usr/local/bin/下。相反,我将它们放置在~/Script/之类的地方。为了在任何地方执行此脚本,请更新.bashrc中的 PATH 变量:

export PATH="$PATH":${HOME}/Script

希望我的建议可以给您提示以解决您的问题。祝你好运!