其中有一行~/.profile
是
PATH="$HOME/bin:$HOME/.local/bin:$PATH"i
我不太确定最后一个i
。
- 我应该将其删除吗?
- 这不是语法错误吗??
答案1
不,这不是语法错误;它只是一个在扩展后附加的字母$PATH
,因为 shell 删除了引号......
$ PATH="$HOME/bin:$HOME/.local/bin:$PATH"i
$ echo $PATH
/home/zanna/bin:/home/zanna/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bini
因此,除了添加本地目录之外,它还有效地/snap/bin
从我的 PATH 中删除了现有的目录,并添加了不存在的目录/snap/bini
。
您可以删除i
来修复您的 PATH。
要查看更改,您需要注销并重新登录,或者source ~/.profile
在您使用的任何 shell 中运行(或使用 启动 shell bash -l
),因为.profile
读取者是登录 shell仅有的。
如果你没有自己做出此更改.profile
,你可能需要通过运行来恢复默认文件
mv ~/.profile{,.old}
cp /etc/skel/.profile ~/.profile
这将重命名旧文件.profile
.profile.old
(如果您愿意,也可以删除该文件)并将其替换为系统的默认版本/etc/skel
。
答案2
我认为以下表达的含义不清楚:
PATH="$HOME/bin:$HOME/.local/bin:$PATH"i
第一部分PATH=
意味着我们为(环境)变量分配一个新值$PATH
。
第二部分是该变量的新值。在当前情况下,变量$HOME
将使用其当前值进行扩展,并将字符串 附加到该值/bin:
。字符串 的下一部分也是如此$HOME/.local/bin:
。最后,将扩展并附加变量的当前(上一个)值$PATH
。冒号:
在表达式中起分隔符的作用PATH
。
最终目标是写:PATH=<some additional paths>+<the the current value of $PATH>
。我们将这些额外的路径放在字符串前面,因为我们希望 shell 首先在这些位置搜索可执行文件,然后才在系统范围内搜索。
该字符i
是不必要的。它将被附加到新的值中,$PATH
并会造成混乱,正如@Zanna 在她的回答。
答案3
是的,这是一个语法错误,除非你改变了一些东西,否则实际.profile
应该是这样的(这是 17.10 版本,请参阅下面的注释):
# ~/.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
在旧版本的 Ubuntu 中,这可能看起来有所不同,因为其中未将检查用户bin
目录是否存在的功能包含在内.profile
。检查它应该是什么样子的最简单方法是查看/etc/skel/.profile
。
因此,按照您在评论中所要求的那样,只需将其放在您的配置文件的末尾即可:
# Manual addition for swift development snapshot
export PATH="$PATH:/home/jeremy/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ubuntu16.04/usr/bin"
如果您将您的个人资料弄乱了,您可以从 中获得一份新的副本/etc/skel/
。