Как сделать так, чтобы скрипты 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
Надеюсь, мои предложения помогут вам решить вашу проблему. Удачи!