Если вы измените текущий каталог в сценарии оболочки?
Я всегда мысленно рассматривал текущий каталог как нечто для пользователей, а не для сценариев, поскольку он зависит от местоположения пользователя и может отличаться при каждом выполнении сценария.
Поэтому, когда я наткнулся на утилиту Java jar -C
Вариант меня немного озадачил.
Для тех, кто не знает -C
опция используется перед указанием файла / папки для включения в банку. Поскольку путь к файлу / папке реплицируется в банке, -C
опция меняет каталоги перед включением файла:
другими словами:
jar -C flower lily.class
сделаю банку с lily.class
файл, тогда как:
jar flower/lily.class
сделаю flower
папка в банке, которая содержит lily.class
Для скрипта, который я создаю, я хочу использовать подстановочные знаки Борна folder/*
но это сделало бы использование -C
невозможно, так как это относится только к следующему непосредственному аргументу.
Таким образом, единственный способ использовать шаблоны - это запуск из текущего каталога; но я все еще чувствую себя неловко в отношении изменения и использования текущего каталога в скрипте.
Есть ли недостаток в использовании текущего каталога в скриптах? Возможно, это почему-то осуждается?
1 ответ
Я не думаю, что по сути что-то не так с изменением текущего каталога из сценария оболочки. Конечно, это не вызовет ничего плохого, если оно будет принято само по себе.
На самом деле, у меня есть стандартный скрипт, который я использую для запуска сервера на базе Java, и самая первая строка:
cd `dirname $0`
Это гарантирует, что остальные команды в сценарии выполняются в каталоге, который содержит сам файл сценария (полезно, когда на одном компьютере размещается несколько экземпляров сервера), независимо от того, откуда фактически был вызван сценарий оболочки. Без изменения текущего каталога в сценарии, он будет работать правильно, только если пользователь не забудет вручную cd
в соответствующий каталог перед запуском скрипта.
В этом случае выполнение cd
Операция из сценария удаляет ручной шаг из процесса запуска / завершения работы сервера и в результате делает ошибки менее подверженными ошибкам.
Как и в большинстве случаев, для такого рода вещей есть законное применение. И я уверен, что есть и сомнительные. Это действительно зависит от того, что наиболее подходит для вашего конкретного варианта использования. Что-то, что я не могу прокомментировать... Я всегда просто позволяю maven
построить мой JAR для меня.