1

Я настраиваю шаблон проекта для своего офиса, который использует файлы .command для инкапсуляции некоторых функций командной строки, так как не все в офисе подкованы в терминале. В основном это будет связано с изменением пути в рамках проекта и запуском некоторых компиляторов / наблюдателей, таких как compass или grunt .

Вот проблема, с которой я сталкиваюсь - у каждого проекта, имеющего свое собственное репозиторий SVN, путь к любому корню проекта будет отличаться для каждого пользователя:

  • Боб: /Users/bobsmith/work/clients/client-a/project-a
  • Джейн: /Users/janedoe/web/projects/project-a

Я хочу поместить файлы .command в проект, которые могут найти корень проекта, независимо от того, где находится проект в системе. Есть ли способ сделать это? Может быть, путем ссылки на путь выполняемой .command ? Вот пример .command который уже существует:

# Replace this path with your project directory - remember to ignore it in svn!
cd /Users/janedoe/web/projects/project-a
grunt watch

1 ответ1

2
# This will cd into the directory in which the .command file exists
cd "$(dirname "$0")"

С другой стороны...

#  This will define an environment variable that contains the full absolute path 
#+ to the directory in which the .command file is kept, and then will cd into 
#+ that directory
ABSPATH="$(cd "$(dirname "$0")" && pwd)"
cd "$ABSPATH"

Почему все двойные кавычки?

Без них вещи ломаются, когда у пользователя есть пробелы на пути к проекту. Также, вероятно, очевидно, но это также сломается, если пользователь не сможет перейти в каталог своего проекта.

Почему $(...), а не `... `?

Этот первый синтаксис новее и предпочтительнее второго. Кроме того, это легче увидеть. Если вы считаете, что сопоставление паренов раздражает, попробуйте сопоставить обратные пометки, особенно если между ними есть обычные одинарные кавычки. Оба они делают то же самое; раскладывают подоболочку и запускают их внутреннюю команду в пределах этой подоболочки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .