Tmux «сортирует» переменную PATH?

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

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

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

9 голосов | спросил Robottinosino 1 FebruaryEurope/MoscowbFri, 01 Feb 2013 15:15:18 +0400000000pmFri, 01 Feb 2013 15:15:18 +040013 2013, 15:15:18

2 ответа


18

Если вы находитесь на 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 соответственно.

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

ответил Graham Ashton 16 PMpTue, 16 Apr 2013 16:20:48 +040020Tuesday 2013, 16:20:48
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"
ответил grawity 1 FebruaryEurope/MoscowbFri, 01 Feb 2013 15:27:11 +0400000000pmFri, 01 Feb 2013 15:27:11 +040013 2013, 15:27:11

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132