Как сделать так, чтобы скрипты Bash ссылались на локальные файлы - PullRequest
0 голосов
/ 31 января 2019

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

Моя цель - предоставить утилиту командной строки для преобразования файлов 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 Ответ

0 голосов
/ 01 февраля 2019

Я бы посоветовал поместить ваши скрипт и 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

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

...