linux添加路径到bashrc,关于linux:在bashrc中有没有合理的方法将新路径附加到PATH?...
我经常需要在.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?...相关推荐
- linux添加用户命令_为Linux的cp和mv命令添加进度条
cp和mv可能是大家日常中使用最多的Linux命令之一.但是有一个突出的问题是这两个命令都不会有任何提示信息,这在操作大文件时候只能干等.可能大家对此已经习以为常,但是其实上也有解决解决方法,本文我们 ...
- Linux添加/删除用户和用户组(linux中,添加cvs用户,实质就是添加linux用户。)
来源:http://www.cnblogs.com/xd502djj/archive/2011/11/23/2260094.html 本文总结了Linux添加或者删除用户和用户组时常用的一些命令和参数 ...
- linux 添加开机动画,如何更改linux 开机画面?
如何更改linux 开机画面? 文章来源:米尔科技 发布日期:2020.12.26 浏览次数:397 次 更改linux 开机画面操作方法有很多.目前在使用freescale imx6 yocto环境 ...
- linux添加ssl信任根证书,linux系统添加根证书linux证书信任列表
1.linux 访问 https 证书问题 [root@boss-test-dev001-jydx ~]# curl -v https://mobile.mycard520.com.tw * Abou ...
- linux添加硬盘分区设置柱面,linux 下添加新硬盘设备和硬盘分区格式化挂载使用磁盘配额限制...
磁盘管理 1.查看硬盘设备信息 fdisk -l 2.磁盘分区.格式化.挂载使用 1).查看硬盘信息:fdisk -l [root@localhost ~]# fdisk -l Disk /dev/s ...
- linux添加虚拟硬盘命令,虚拟机linux扩盘命令操作
虚拟机linux扩展硬盘分原有硬盘上增加及新增硬盘,二者实现差不多. 扩盘: fdisk -l查看是哪个盘扩盘了,如sdb 重启后,将sdb刷新pv: pvresize /dev/sdb,pvdisp ...
- linux添加硬盘分区设置柱面,Linux添加硬盘并分区格式化
一.Linux的硬盘识别 2.6 kernel以后,linux会将识别到的硬件设备,在/dev/下建立相应的设备文件.如: sda 表示第1块SCSI硬盘. hda 表示第 ...
- 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 ...
- linux添加三个用户lab1,linux操作系统实验linux下用户与组的管理
姓名学号班级 实验三Linux下用户与组的管理 一.实验目的 1.理解/etc/passwd和/etc/group文件的含义: 2.掌握桌面环境下管理用户与组群的方法: 3.掌握利用shell命令管理 ...
最新文章
- merge-two-smerge-two-sorted-listsorted-lists
- Ubuntu16.04安装Chrome浏览器及解决root不能打开的问题
- go mysql 乱码_MySQL 乱码之我见
- spring 基于注解的控制器配置
- 瑞星2008网络版序列号大全
- 运行时异常和检查性异常区别
- 新一代数据库TiDB在美团的实践
- mysql 转ascii_MySQL ascll()函数
- ReactJS 知识简介
- 第一易,唯一难,为什么它是ofo、天学网的不二选择
- H265 Vs VP9
- 【毕业设计】QT从入门到实战:实现模仿QQ通讯,也是在校的最后一篇博文。
- 检测周转时间 TAT :TURN-AROUND TIME
- dither技术的原理及应用
- AutoCAD Civil 3D笔记
- outlook ios日历_如何从Outlook 2013中的日历中删除假期
- odoo14Vscode调试环境
- Java中Map.Entry详解
- 阿里、京东、美团等主流互联网公司的最新招聘标准
- 微信事件推送原理猜想与小程序接口对接经验之谈(即时配送)