.profile и .bash_profile игнорируются при запуске tmux из .bashrc?

6336
glitch

У меня возникла проблема с получением моего .profile при получении SSH в экземпляре сервера Ubuntu 12.04. Мой .bashrc делает следующее к концу:

if [[ "$TERM" != "screen-256color" ]] then tmux attach-session -t "$USER" || tmux new-session -s "$USER" exit fi 

Если я закомментирую этот блок кода и снова войду с ssh, файл ~ / .profile будет получен, как и ожидалось. В разделе ~ нет .bash_profile или .bash_login, которые бы препятствовали чтению ~ / .profile. Переименование .profile в .bash_profile в качестве эксперимента также не привело к получению файла.

У кого-нибудь есть догадки, почему это может происходить? Я мог бы просто вставить все в .bashrc, но я бы хотел узнать, почему .profile не поставляется.

4
Вы уверены, что это не источник? Что произойдет, если вы добавите `echo foo> logfile` или аналогичный, просто чтобы проверить, получен ли он из источника? Я думаю, что проблема может быть (насколько я могу сказать, бесполезным) `выходом 'в вашем фрагменте выше. terdon 10 лет назад 0
terdon, без `exit` вы должны были бы напечатать exit (или использовать CTRL-D) два раза два выхода из сеанса ssh. При выходе сессия bash немедленно закрывается, а это означает, что когда tmux закрыт, ssh-соединение также закрывается. Тестирование с использованием фрагмента, который вы опубликовали выше, подтвердило, что .profile действительно не читается сеансом tmux (но на самом деле он создается в сеансе bash, запускающем tmux) glitch 10 лет назад 0
Ах, хорошо, извините, я не использую `tmux`, поэтому я не сталкивался с этим. То есть вы говорите, что добавление выложенного вами оператора `if` не дает файлу получить источник? Очень странно ... Если через несколько дней вы не получите здесь хороших ответов, вы можете пометить вопрос о миграции на [U & L] (http: // http: //unix.stackexchange.com/), возможно, у вас есть лучше удачи там. terdon 10 лет назад 1
Хорошее предложение, спасибо. Я оставлю это здесь на некоторое время и перенесу, если ничего не произойдет. glitch 10 лет назад 0
Я предполагаю, что оболочка, запущенная под `tmux`, не является оболочкой входа в систему (что произойдет, если вы введете` logout`?), Поэтому оболочка не будет смотреть на `.bash_profile`; он будет смотреть только на `.bashrc`. Поэтому переместите команды, которые вы хотите выполнить, из `.bash_profile` в` .bashrc`, или поместите их в обоих местах, или сделайте один источник другим. См. [Почему ~ / .bash_profile не получает источник при открытии терминала?] (Http://askubuntu.com/questions/121073/why-bash-profile-is-not-getting-sourced-when-opening-a- терминал) Спроси Ubuntu. Scott 10 лет назад 2
@ Скотт, ты прав, это действительно не оболочка для входа. Все ваши решения кажутся действительными. glitch 10 лет назад 0

1 ответ на вопрос

8
Scott

As discussed in Why ~/.bash_profile is not getting sourced when opening a terminal? on “Ask Ubuntu”, the shell running under tmux is not a login shell.

How can I tell whether a shell is a “login shell”?

  1. Try typing “logout”.  If the shell terminates, it was a login shell.  If it says it isn’t a login shell, then it isn’t.
  2. Type “ps -fp$$”.  (Modify, if your ps takes different args, to do whatever you need to in order to get a full/long listing of process information for the current shell ––  “–p” means “look at this process”, and “$$” is the PID of the shell.)  If the process name begins with a dash (hyphen), as in “-bash” or “-csh”, it’s a login shell; otherwise, it isn’t.  (Probably.)

… so, the shell running under tmux will not look at .bash_profile; it will look only at .bashrc.  So move the commands that you want executed from .bash_profile to .bashrc, or put them both places, or make one source the other.

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