首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >展开$PATH问题$HOME/bin设置了两次

展开$PATH问题$HOME/bin设置了两次
EN

Ask Ubuntu用户
提问于 2019-08-29 15:14:28
回答 2查看 780关注 0票数 2

我用的是xubuntu仿生学中的shell bash。

我将尝试将用户的$PATH扩展到$HOME/..profile。

代码语言:javascript
复制
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

结果有点出乎意料。

代码语言:javascript
复制
echo $PATH
/home/alex/.local/bin:/home/alex/bin:/home/alex/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

$HOME/bin设置两次。我怎么才能避免呢?

在$HOME/..bashrc中没有声明任何内容。

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2019-08-29 15:41:29

我使用Stephen的"Bash路径函数“(参见他在Linux中的文章斯蒂芬·科莱尔的文章 )。它允许我在shell编程中使用“冒号分隔列表”作为数据类型。例如,我可以通过以下方法生成当前目录中所有目录的列表:

代码语言:javascript
复制
dirs="";for i in * ; do if [ -d $i ] ; then addpath -p dirs $i; fi; done  

然后,listpath -p dirs生成一个列表。

使用uniqpathlistpath (来自bash_path_funcs),您可以简单地:

代码语言:javascript
复制
walt@bat:~(0)$ PATH=$HOME/bin:$PATH
+walt@bat:~(0)$ listpath
/home/walt/bin
/home/walt/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin
/home/walt/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

+walt@bat:~(0)$ uniqpath -p PATH
+walt@bat:~(0)$ listpath
/home/walt/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/gameswalt@bat:~(0)$ PATH=$HOME/bin:$PATH
票数 1
EN

Ask Ubuntu用户

发布于 2019-08-29 15:21:40

Ubuntu已经配置为自动将$HOME/bin添加到路径中。

您刚才提到您的发行版已被服务器转换为桌面,我不知道这是如何影响事情的,但是您可以检查:

代码语言:javascript
复制
$ cat ~/.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.

# 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 directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"

这听起来像是正在执行,而您正在手动执行的是在文件的最后一行上加倍。

使用grep查找所有引用

可以使用grep查找引用$HOME/bin的所有文件:

代码语言:javascript
复制
grep -rnw --exclude-dir={proc,root,run,sys,/tmp,tmpfs,var} '/' -e "$HOME/bin"
票数 3
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1169388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档