$ PATH расширен в .bashrc, недоступный в скрипте git hook - PullRequest
3 голосов
/ 23 февраля 2012

Мне нужно выполнить определенную команду при получении push-сообщения в хранилище. Этот бинарный файл находится по произвольному пути, который я добавил в .bashrc, и работает нормально из оболочки. Я написал небольшой скрипт в качестве git hook. Однако дополнения .bashrc, похоже, не влияют на этот сценарий.

Я пытался поместить bash ~/.bashrc в начало скрипта, но не сработало. Если я запускаю скрипт вручную, скажем $ sh post-receive, он работает просто отлично. Что не так?

Ответы [ 3 ]

3 голосов
/ 23 февраля 2012

Сценарий, вероятно, выполняется от имени другого пользователя или вызывается с параметрами для отключения интерактивных функций и / или сценариев запуска.Так и должно быть;на самом деле здесь нет ничего «неправильного».

Вы можете добавить . /home/you/.bashrc в качестве быстрого и грязного обходного пути;или, точнее, просто измените PATH скрипта напрямую;или, еще точнее, модульные зависимости, например, поместив код в отдельный файл, который вы получаете как из своего .bashrc, так и из этого скрипта - но для этого изолированного случая это, безусловно, излишне.

команда «включить» файл оболочки scipt называется «исходник» или «точка»;в Bash source доступен как синоним, но в надлежащей оболочке Bourne это буквальная точка (точечный период, точка):

. /path/to/stuff
2 голосов
/ 12 июля 2016

Проверьте ваш .bashrc. В некоторых дистрибутивах конец скрипта пропускается, когда он не работает в интерактивном режиме.Просто возьмите с собой ненужные вещи, чтобы пропустить часть.

Это выглядит так:

# If not running interactively, don't do anything
case $- in
  *i*) ;;
  *) return;;
esac
2 голосов
/ 23 февраля 2012

То, что bash ~/.bashrc порождает новую оболочку, которая выполняет файл с именем .bashrc, и любое состояние, которое находится внутри этой подоболочки, естественным образом теряется при выходе из этой подоболочки - что необходимо сделать перед переходом ко второй строкеваш фактический скрипт, который содержит вызов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...