我经常需要在.bashrc中为PATH环境变量添加新路径,如下所示:

export PATH = / usr / local / bin:$ PATH

然后为了让它生效,我总是'source~ / .bashrc'或'。 ?/ .bashrc',虽然我发现这样做的一个缺点让我感到不舒服。

如果我继续这样做,PATH会越来越长,有许多重复的条目,例如在上一个命令中,如果我两次输入它,PATH的值将是

PATH = / usr / local / bin:/ usr / local / bin:/ usr / local / bin:$ PATH(< - 原始路径)。

是否有更好的方法在bashrc中将新路径附加到PATH而不会让它变得难看?

属于superuser.com

@Paul:我倾向于同意(或服务器故障),但解决方案是程序化的。

另一种方法是检查是否未设置OPATH。如果是,请将其设置为PATH。这将是您原来的路径。

if ["$OPATH" =="" ];

then

OPATH=$PATH

fi

PATH=~/bin:$OPATH

(代码未经测试......)

我测试了代码,它工作正常,首先记录原始的东西很聪明,谢谢。

我的方法就像rcollyer一样,但更通用,处理优先级并使用更多代码。

function append () {

local val

eval val=\$$1

if [[ x$val = x ]] ; then

eval $1=$2

else

eval $1="$val:$2"

fi

}

function is_in() {

local pattern

pattern=":$1\$|^$1:|:$1:"

echo $2 | egrep -q"$pattern" &&  return 0

return 1

}

function append_if_absent() {

local val

eval val=\$$1

if ! is_in"$2""$val" ; then

append"$1""$2"

fi

}

export ROOTSYS=/usr/local/root

append_if_absent LD_LIBRARY_PATH $ROOTSYS/lib/root

append_if_absent PATH $ROOTSYS/bin

如果您愿意接受shell的更改,zsh具有declare -U用于此目的:它将自动从数组中删除重复项,同时保持优先级。它还允许您使用$path而不是$path。

% PATH=a:b:c:d:c:b:a

% echo $PATH

a:b:c:d:c:b:a

% declare -U PATH

% echo $PATH

或者,为了提高可读性,您可以使用自动保持同步的数组表单:

% path=(a b c d c b a)

% print $path

a b c d c b a

% print $PATH

a:b:c:d:c:b:a

% declare -U path

% print $path

a b c d

% print $PATH

a:b:c:d

从我的.bashrc:

pathadd() {

if [ -d"$1" ] && [[":$PATH:" != *":$1:"* ]]; then

PATH="$PATH:$1"

fi

}

pathadd /usr/local/bin

pathadd ~/bin

...etc

请注意,这会将目录添加到路径的末尾;做出明显的改变,将它们添加到开头。

这是我长期以来一直使用的:我向.bash_profile或.bashrc添加了一个名为addpath()的函数,然后我可以在路径中添加一个目录,知道不会有重复。例如:

addpath ~/bin

addpath ~/myproj/bin

这是addpath()的源代码:

function addpath()

{

if [ $# -eq 0 ]

then

echo"  Usage: addpath dir ..."

return 1

fi

local p

local dir

local IFS=:

local found

for dir; do

found=0

for p in $PATH; do

if ["$p" ="$dir" ]; then

found=1

fi

done

if ["_$found" ="_0" ]; then

PATH=$PATH:$dir

fi

done

}

我的解决方案是一个班轮:

export PATH=`echo ::${PATH} | sed -e 's/\:/

/g' | sort | uniq \

| awk 'BEGIN {ORS=":"} {print $0}'`

其中sed用换行符替换:,sort和uniq去除任何重复项,awk重建路径。这样做的缺点是订单不能维护,因此如果您希望某个位置的程序优先于其他位置的程序,则会导致问题。我没有实现它,但我想你可以使用perl按顺序维护这些,同时剥离重复项。

聪明,但绝对优先。

linux添加路径到bashrc,关于linux:在bashrc中有没有合理的方法将新路径附加到PATH?...相关推荐

  1. linux添加用户命令_为Linux的cp和mv命令添加进度条

    cp和mv可能是大家日常中使用最多的Linux命令之一.但是有一个突出的问题是这两个命令都不会有任何提示信息,这在操作大文件时候只能干等.可能大家对此已经习以为常,但是其实上也有解决解决方法,本文我们 ...

  2. Linux添加/删除用户和用户组(linux中,添加cvs用户,实质就是添加linux用户。)

    来源:http://www.cnblogs.com/xd502djj/archive/2011/11/23/2260094.html 本文总结了Linux添加或者删除用户和用户组时常用的一些命令和参数 ...

  3. linux 添加开机动画,如何更改linux 开机画面?

    如何更改linux 开机画面? 文章来源:米尔科技 发布日期:2020.12.26 浏览次数:397 次 更改linux 开机画面操作方法有很多.目前在使用freescale imx6 yocto环境 ...

  4. linux添加ssl信任根证书,linux系统添加根证书linux证书信任列表

    1.linux 访问 https 证书问题 [root@boss-test-dev001-jydx ~]# curl -v https://mobile.mycard520.com.tw * Abou ...

  5. linux添加硬盘分区设置柱面,linux 下添加新硬盘设备和硬盘分区格式化挂载使用磁盘配额限制...

    磁盘管理 1.查看硬盘设备信息 fdisk -l 2.磁盘分区.格式化.挂载使用 1).查看硬盘信息:fdisk -l [root@localhost ~]# fdisk -l Disk /dev/s ...

  6. linux添加虚拟硬盘命令,虚拟机linux扩盘命令操作

    虚拟机linux扩展硬盘分原有硬盘上增加及新增硬盘,二者实现差不多. 扩盘: fdisk -l查看是哪个盘扩盘了,如sdb 重启后,将sdb刷新pv: pvresize /dev/sdb,pvdisp ...

  7. linux添加硬盘分区设置柱面,Linux添加硬盘并分区格式化

    一.Linux的硬盘识别 2.6 kernel以后,linux会将识别到的硬件设备,在/dev/下建立相应的设备文件.如: sda        表示第1块SCSI硬盘. hda        表示第 ...

  8. linux添加五笔输入法,RedHat Linux 9中vim升级方法及如何安装五笔输入法

    1 vim升级方法 1.1 下载新版本的vim安装包及语言包 到vim官方网站上www.vim.org下载对应的版本,这里以7.2版为例 vim-7.2.tar.bz2 vim-7.2-lang.ta ...

  9. linux添加三个用户lab1,linux操作系统实验linux下用户与组的管理

    姓名学号班级 实验三Linux下用户与组的管理 一.实验目的 1.理解/etc/passwd和/etc/group文件的含义: 2.掌握桌面环境下管理用户与组群的方法: 3.掌握利用shell命令管理 ...

最新文章

  1. merge-two-smerge-two-sorted-listsorted-lists
  2. Ubuntu16.04安装Chrome浏览器及解决root不能打开的问题
  3. go mysql 乱码_MySQL 乱码之我见
  4. spring 基于注解的控制器配置
  5. 瑞星2008网络版序列号大全
  6. 运行时异常和检查性异常区别
  7. 新一代数据库TiDB在美团的实践
  8. mysql 转ascii_MySQL ascll()函数
  9. ReactJS 知识简介
  10. 第一易,唯一难,为什么它是ofo、天学网的不二选择
  11. H265 Vs VP9
  12. 【毕业设计】QT从入门到实战:实现模仿QQ通讯,也是在校的最后一篇博文。
  13. 检测周转时间 TAT :TURN-AROUND TIME
  14. dither技术的原理及应用
  15. AutoCAD Civil 3D笔记
  16. outlook ios日历_如何从Outlook 2013中的日历中删除假期
  17. odoo14Vscode调试环境
  18. Java中Map.Entry详解
  19. 阿里、京东、美团等主流互联网公司的最新招聘标准
  20. 微信事件推送原理猜想与小程序接口对接经验之谈(即时配送)

热门文章

  1. ACSII码(有图,收藏版!)
  2. redis操作五种数据的命令说明
  3. php 小程序播放腾讯视频 video标签无法播放腾讯视频问题
  4. 社会心理学,第13章 冲突,14章 临床
  5. 音频 图像 视频等数据的压缩与存储格式
  6. 浅谈 qmake 之 pro、pri、prf、prl文件
  7. scrcpy 安卓投屏、录屏工具
  8. ESP8266wifi模块连接原子云实现手机与单片机的通信
  9. Mybatis | Mybatis标签collection一对多的使用
  10. python中元组用符号什么表示_Python中的“命名元组”是什么?