Smi*_*ile 11 bash environment-variables
有一行~/.profile是
PATH="$HOME/bin:$HOME/.local/bin:$PATH"i
Run Code Online (Sandbox Code Playgroud)
我不确定最后一个i。
Zan*_*nna 13
不,这不是语法错误;它只是一个在扩展后附加的字母$PATH,因为外壳删除了引号......
$ 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
Run Code Online (Sandbox Code Playgroud)
因此,除了添加本地目录外,它还有效地/snap/bin从我的 PATH 中删除了现有的,并添加了不存在的/snap/bini.
您可以删除i以修复您的 PATH。
要查看更改,您需要注销并重新登录或source ~/.profile在您正在使用的任何外壳程序中运行(或使用 启动外壳程序bash -l),因为.profile仅由登录外壳程序读取。
如果您没有对.profile自己进行此更改,则可能需要通过运行来恢复默认文件
mv ~/.profile{,.old}
cp /etc/skel/.profile ~/.profile
Run Code Online (Sandbox Code Playgroud)
这将重命名旧的.profile .profile.old(如果需要,您也可以删除该文件)并将其替换为系统的默认版本/etc/skel。
是的,这是一个语法错误,.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
Run Code Online (Sandbox Code Playgroud)
这在旧版本的 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"
Run Code Online (Sandbox Code Playgroud)
如果您完全弄乱了您的个人资料,那么您可以在其中获得一份新的副本/etc/skel/。
我认为这里不清楚以下表达式的含义:
PATH="$HOME/bin:$HOME/.local/bin:$PATH"i
Run Code Online (Sandbox Code Playgroud)
第一部分PATH=意味着我们为(环境)变量分配一个新值$PATH。
第二部分是该变量的新值。在当前情况下,变量$HOME将以其当前值扩展,并将字符串附加到该值/bin:。字符串的下一部分也是如此$HOME/.local/bin:。最后,$PATH变量的当前(前一个)值将被扩展和附加。冒号:在PATH表达式中起到分隔符的作用。
最终目标是编写:PATH=<some additional paths>+<the the current value of $PATH>. 我们将这些额外的路径放在字符串的前面,因为我们希望 shell 首先在这些位置搜索可执行文件,然后再搜索系统范围内的可执行文件。
字符i是不必要的。$PATH正如@Zanna 在她的回答中所解释的那样,它将被附加到 的新值并且会弄得一团糟。