在我的文件中,~/.profile
我有最后一个块,应该bin/ directory
像这样加载我的个人数据:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
但它似乎没有加载:
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
为什么这不起作用? (我的 shell 是 bash。)
编辑跳跳虎
echo $0 => bash
echo $HOME => /home/student
whoami => student
less /etc/*-release =>
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
答案1
从顶部~/.profile
:
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
所以(如果你使用bash
作为你的外壳)我猜测~/.bash_profile
或者~/.bash_login
在你的系统上。选择一个并编辑它以包括:
export PATH=$PATH:$HOME/bin
然后保存source ~/.bash_login
或注销并重新登录。
编辑:
你说你的~/.bash_profile
和~/.bash_login
都缺失了$HOME
。我认为我们需要确认一些事情。请在您原来的问题中发布以下结果:
echo $0
echo $HOME
whoami
less /etc/*-release
编辑2:
~/.profile
就我个人而言,根据提供的信息和文档,我不知道为什么没有包含在您的案例中。在测试时,我确实注意到,~/.profile
当我ssh
进入时,我的系统会被扫描,但当我启动新终端时,不会被扫描。
但是,有一个简单的解决方案可以将$HOME/bin
其包含在交互式 shell 中。编辑(如果不存在则创建)~/.bashrc
并向其添加以下行:
export PATH=$PATH:$HOME/bin
保存、注销并重新登录,或者source ~/.bashrc
。
如果您愿意,export
可以扩展该行以检查是否存在:$HOME/bin
if [ -d "$HOME/bin" ]
then
export PATH=$PATH:$HOME/bin
fi
为什么~/.bashrc
而不是另一个文件?个人喜好,似乎也比较靠谱。
答案2
这内包shell启动文件的规则很复杂。在您的设置中,.profile
当您在 X 会话中打开新终端时,很可能不会被包含在内(尝试将其放入echo .profile
其中.profile
并查看启动 shell 时是否显示该消息)。
. "$HOME/.profile"
应手动重新加载配置文件。
登录和退出 X 也应该会导致.profile
加载。
或者,您可以执行. $HOME/.profile
from .bashrc
(同时使用基于变量的防护来防止双重包含)以确保.profile
每次启动 shell 时始终包含。
(您不需要这样做,export PATH
因为PATH
它已经是导出的变量,修改其值不会改变其export
状态。)
答案3
如果你想.profile
加载,你需要启动一个登录 shell:
$ bash -l
这对于跑步来说应该足够了。您可以比较登录 bash 启动前后的 PATH 以确认差异。
为了获得更永久的解决方案,您需要在终端(控制台)启动之前的某个时刻启动登录 shell。以特定用户身份登录发生在某些 dm(显示管理器)(gnome、kde、xfce、lxde 等)上。更改环境变量 PATH 以满足您的需要应该是他们中任何一个人的工作。
例如,对于xfce,解决方案是更改xinitrc
:
$ cat >"$HOME/.config/xfce4/xinitrc" <<-\_EOT_
#!/bin/sh
# Ensure programs in ~/bin are available for the X session.
p="$HOME/bin";
[ "$p" != "${PATH%%:*}" ] && export PATH=$p:$PATH
_EOT_
cat "/etc/xdg/xfce4/xinitrc" | tail -n+2 >> "$HOME/.config/xfce4/xinitrc"
对于 gnome 来说,似乎要更改的文件是~/.pam_environment
。
对于 KDE,遵循本指南,要创建该文件,您可以使用以下代码:
$ file='$HOME/.config/plasma-workspace/env/path.sh'
$ code='export PATH=$HOME/bin:$PATH'
$ echo "$code" >> "$file"