Чи "tmux" сортує "змінну PATH?


14

У мене є відтворювана проблема:

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

Як це зупинити? Що це пояснює?

Відповіді:


29

Якщо ви перебуваєте на Mac і хочете /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/binзадатися питанням, чому при запуску tmux постійно створюється передчуття PATH, це відбувається через утиліту, що називається path_helper, яка запускається з вашого /etc/profileфайлу.

Ви не можете легко переконати tmux (а точніше, bash) не джерело /etc/profile(чомусь tmux завжди працює як оболонка для входу, що означає / etc / profile буде прочитаний), але ви можете переконатися, що ефекти path_helper don не гвинтить разом із вашою ПАТОЮ.

Трюк полягає в тому, щоб переконатися, що 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 відповідно.

Сподіваюся, що це має сенс ...


1
Це повністю зробило це для мене! У мене це сховалося за if [ -n "$TMUX" ]статтею, але мені було цікаво - наскільки [ -f /etc/profile ]насправді це важливо ? Чи не безпечно припустити, що /etc/profileце завжди звичайний файл?
Райан Люе

1
@RyanLue Ви могли зручно замінити -fз -e, але я б не особисто спробувати і джерело файлу зі сценарію, що запускаються коли я увійти в систему, якщо я б перевірив це було там. Я, як правило, повторно використовую свій скрипт bash на багатьох різних машинах (і операційних системах), тому мені подобається переконатися, що вони є кулезахисними. Я можу уявити, що деякі інші варіанти Unix можуть назвати це ще чимось.
Грем Ештон

ДЯКУЮ! Це зводило мене з розуму, і введення цього маленького фрагмента на вершину мого ~/.bash_profileповертало розум до мого щасливого світу tmux.
hoosierEE

Якщо ви не хочете возитися з системою по замовчуванню, set -g default-command "${SHELL}"в .tmux.confсилах tmux використовувати не для входу снарядів. Я не бачу сенсу в цьому, оскільки ви зазвичай відкриваєте tmux після того, як ви вже увійшли.
seeker_of_bacon

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"

0

@Graham Ashton Дякую за вашу ідею

Моя пропозиція - це те, що ви поставите

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

у вашому .zshrc-файлі вгорі.

ПЕРЕГУКАЙТЕ, що ваш

export NVM_DIR="$HOME/.nvm"
. "/usr/local/opt/nvm/nvm.sh"

нижче.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.