# ~/.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.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
不,这不是语法错误;它只是在扩展之后附加的一个字母
$PATH
,因为外壳删除了引号......因此,除了添加本地目录之外,它还有效地
/snap/bin
从我的 PATH 中删除了现有目录,并添加了不存在的/snap/bini
.您可以删除
i
以修复您的 PATH。要查看更改,您需要注销并重新登录或
source ~/.profile
在您正在使用的任何 shell 中运行(或使用 启动 shellbash -l
),因为.profile
仅由登录 shell读取。如果您没有对
.profile
自己进行此更改,您可能希望通过运行恢复默认文件这将重命名旧
.profile
.profile.old
文件(如果需要,您也可以删除该文件)并将其替换为系统的默认版本/etc/skel
。是的,这是一个语法错误,
.profile
除非你改变了一些东西,否则实际应该是这样的(这是 17.10 版本,请参阅下面的注释):这在旧版本的 Ubuntu 中可能看起来不同,其中检查用户
bin
目录是否存在未包含在.profile
. 检查它的外观的最简单方法是查看/etc/skel/.profile
.因此,要按照您在评论中的要求添加,只需将其放在配置文件的末尾:
如果您完全搞砸了您的个人资料,有一个副本,您可以从中获得一个新的
/etc/skel/
。我认为这里不清楚以下表达式的含义:
第一部分
PATH=
意味着我们为(环境)变量分配一个新值$PATH
。第二部分是该变量的新值。在当前情况下,变量
$HOME
将使用其当前值扩展,并且该值将附加字符串/bin:
。字符串的下一部分也是如此$HOME/.local/bin:
。最后,变量的当前(前一个)值$PATH
将被扩展和附加。冒号在表达式:
中起到分隔符的作用。PATH
最终的目标是写:
PATH=<some additional paths>+<the the current value of $PATH>
. 我们将这些附加路径放在字符串前面,因为我们希望 shell 先在这些位置搜索可执行文件,然后才在系统范围内搜索。角色
i
是不必要的。$PATH
正如@Zanna 在她的回答中所解释的那样,它将被附加到新的值并且会造成混乱。