Как сделать так, чтобы скрипты Bash ссылались на локальные файлы

Моя конкретная проблема

Моя цель - предоставить утилиту командной строки для преобразования файлов PowerPoint в PDF-файлы. Я пробовал решения, которые используют unoconv, но они не выполняют преобразование должным образом. Я нашел хороший рабочий процесс, который я сохранил как export_pdf.workflow, Я могу запустить это из терминала на файл:

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

который делает то, что я хочу.

Я хочу сделать это в сценарии оболочки, но проблема в том, чтобы знать, где разместить рабочий процесс. Я включил строку использования (поэтому на самом деле не 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 и сделайте его исполняемым: в истинном стиле Apple это фактически каталог, а не просто один файл, который передается в Automator.

Общая проблема

Вне моего конкретного варианта использования проблема, которую я пытаюсь решить, состоит в том, что у меня есть файл, который принимает много аргументов, и у меня есть вариант использования, где я хочу предоставить некоторые файлы в качестве аргументов по умолчанию (например, у меня есть файл конфигурации, который Я всегда хочу уточнить).

Где находится "правильное" или "принятое" место для размещения файла some_local_file (локально для скрипта, а не там, где выполняется файл), чтобы я мог поместить следующий скрипт в /usr/local/bin/ или добавьте содержащий каталог к ​​пути:

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

1 ответ

Я бы посоветовал поместить ваш скрипт и 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/, Чтобы выполнить этот скрипт везде, обновите переменную PATH в .bashrc:

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

Надеюсь, мои предложения помогут вам решить вашу проблему. Удачи!

Другие вопросы по тегам