11

У меня есть воспроизводимая проблема:

  1. настроить мой путь в Bash .profile
  2. Запустите tmux, tmux , tmux attach или любой другой вариант.
  3. Отобразите $ PATH и просмотрите его с теми же компонентами, но в другом порядке.

Как это остановить? Чем это объясняется?

2 ответа2

24

Если вы работаете на Mac и задаетесь вопросом, почему /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin продолжает добавляться к PATH, когда вы запускаете tmux, это из-за утилиты, которая называется path_helper, который запускается из вашего файла /etc/profile .

Вы не можете легко убедить tmux (точнее, bash) не использовать исходный /etc/profile (по какой-то причине tmux всегда запускается как оболочка входа в систему, что означает, что /etc /profile будет прочитан), но вы можете убедиться, что эффекты path_helper не связаны с вашим PATH.

Хитрость заключается в том, чтобы убедиться, что PATH пуст перед запуском path_helper. В моем файле ~/.bash_profile меня есть это:

if [ -f /etc/profile ]; then
    PATH=""
    source /etc/profile
fi

Очистка PATH перед выполнением path_helper предотвратит добавление значения PATH по умолчанию к выбранному (ранее) выбранному PATH и позволит использовать остальные ваши персональные сценарии установки bash (команды ниже .bash_profile или в .bashrc если вы получили его из .bash_profile) для соответствующей настройки вашего PATH.

Надеюсь, что это имеет смысл ...

5

Нет; сортировка $PATH была бы слишком сумасшедшей вещью, поскольку многие системы зависят от ее пользовательского порядка.

Тем не менее, tmux запускает вашу оболочку в режиме "входа в систему", что приводит к повторному получению ~/.profile . Это означает, что если у вас есть что-то вроде PATH=/my/dir:/another/dir:$PATH в этом файле, это будет сделано снова, в результате чего $ PATH будет содержать /my/dir:/another/dir:/my/dir:/another/dir:(etc.) . Чтобы избежать этого, вы можете использовать другую переменную для проверки:

if [ "$_SKIP_PROFILE" ]; then
    return 0
else
    export _SKIP_PROFILE=y
fi

export PATH="/my/dir:/another/dir:$PATH"

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