我有一个可重现的问题:
- 在Bash .profile中设置我的PATH
- 启动TMUX通过
tmux
,tmux attach
或任何变体 - 回显$ PATH并以相同的组件但以不同的顺序查看它
如何停止呢?是什么原因呢?
我有一个可重现的问题:
tmux
,tmux attach
或任何变体如何停止呢?是什么原因呢?
Answers:
如果您使用的是Mac,并且想知道为什么/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
在运行tmux时为什么总是将PATH放在首位,这是因为从/etc/profile
文件中运行了名为path_helper的实用程序。
您不能轻易说服tmux(或更确切地说是bash)不获取源代码/etc/profile
(出于某种原因tmux始终作为登录shell运行,这意味着将读取/ etc / profile),但是您可以确保path_helper的作用不与您的PATH无关。
诀窍是在path_helper运行之前确保PATH为空。在我的~/.bash_profile
文件中,我有:
if [ -f /etc/profile ]; then
PATH=""
source /etc/profile
fi
在path_helper执行之前清除PATH可以防止将默认PATH放在您之前选择的PATH之前,并允许其余的个人bash设置脚本(更进一步的命令.bash_profile
,或者.bashrc
如果您来自,则来自.bash_profile
)来进行设置。相应的路径。
希望有道理...
-f
为-e
,但是我个人不会尝试从登录时运行的脚本中获取文件,除非我检查了文件是否在那里。我确实倾向于在很多不同的机器(和操作系统)上重用我的bash脚本,所以我想确保它们是防弹的。我可以想象其他一些Unix变体可能会称之为其他名称。
~/.bash_profile
回到了快乐的tmux世界。
set -g default-command "${SHELL}"
在.tmux.conf
部队TMUX使用非登录shell。无论如何,我都看不出要点,因为通常您已经登录后才打开
没有; 排序$PATH
将是一件非常疯狂的事情,因为许多系统都取决于其用户设置的顺序。
但是,tmux 确实以“登录”模式启动您的shell,导致再次~/.profile
被获取。这意味着,如果该文件中包含类似内容,它将再次执行,导致$ PATH包含。为了避免这种情况,您可以使用另一个变量进行检查:PATH=/my/dir:/another/dir:$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"
if [ -n "$TMUX" ]
子句的后面,但是我想知道-[ -f /etc/profile ]
真正重要吗?假定该/etc/profile
文件始终是常规文件,是否安全?