Git PS1 & Bash Subshell Issue (Windows против Linux) - PullRequest
0 голосов
/ 29 ноября 2018

После траления в Google, на странице руководства по bash и других вопросах здесь, в SO, я обнаружил похожие сообщения, но мне не удалось определить причину этой конкретной проблемы.

Я установил git-prompt.sh локально,Все хорошо в оболочке bash --login.Это действительно хорошо как для Windows, так и для Linux.

Однако, как только я запускаю оболочку bash (например, чтобы я мог временно изменить свою среду и т. Д.), Я получаю сообщение об ошибке:

$ ... <in/out of repos and all good>
$ bash
bash: __git_ps1: command not found

Эта проблема не возникает в Windows.

Что-то, на что нужно обратить внимание, это то, что у меня есть мои точечные файлы через git.По этой причине я могу запустить свою конфигурацию как в Windows, так и в Linux, и у них обоих одинаковый файл git-prompt.sh.

  • Windows 10 git == 2.19.2.windows.1 bash == 4.4.19 (2) -релиз
  • Arch Linux git == 2.19.2 bash == 4.4.23 (1) -релиз

Обе являются свежими версиями ОС.

Моя лучшая догадка на данный момент заключается в том, что различные семантики взаимодействия с оболочкой выполняются при работе под windows, а не под linux.Я экспериментировал с различными вызовами bash (--login, --norc, т. Е. Я могу установить вещи вручную) и т. Д. Для этого подозрения есть 3 причины:

  1. Эта ошибка выглядит как вид ошибки, которую мы получаем, когда забываем экспортировать переменную / параметр.
  2. Оба источника "/etc/profile.d" различны для каждой платформы.Некоторые содержат поддержку git, и, возможно, это способствует предыдущей причине.
  3. Мой bash-fu был хорош ~ 10 + лет назад, теперь я ржавый.

Одна вещь, которую яточно знаю, что первая оболочка bash для входа в систему («sub») отлично работает на обеих платформах.

Есть идеи, отзывы или указатели?

Спасибо,

Мэтт

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

решаемая.Проблема возникла из-за сочетания (2) выше (то есть косвенных различных версий приглашения) и неправильного цитирования регулярного выражения мной в карауле.

Спасибо за вашу помощь.

0 голосов
/ 29 ноября 2018

Похоже, что ваш PS1 (или что-то, выполняющее аналогичную функцию) экспортировано, но сама ваша функция __git_ps1 не является.

Чтобы экспортировать функцию, используйте export -f __git_ps1.

...