$HOME/bin 目录不在 $PATH 上

$HOME/bin 目录不在 $PATH 上

在我的文件中,~/.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/.profilefrom .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"

相关内容