运行异构环境始终是一个挑战。 拥有一个AIX,IRIX,HPUX,Ultrix,Solaris和几种Linux版本的企业,一个好的通用PATH设置允许一组好的通用命令,但也包括额外的,如“ifconfig”,“ping” ,和“做”,往往不是在默认情况下?
$HOME/bin:$HOME/sbin:/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/ccs/bin:/usr/ucb
特别是,你不想在.bashrc中盲目地添加到$ PATH中,或者你最终在sub-sub-sub-subshell上乱七八糟。 你想包含所有的sbin目录,因为重要的工具可以在那里。 你想包含/ usr / ccs / bin:/ usr / ucb,因为Solaris会提供一些你可能会用到的东西。
值得注意的是,本地安装软件的select是无限的,例如GNU工具 – 通常您希望在系统版本之前将它们放在PATH中。 另外,我遗漏了更有可能成为历史好奇的目录,如/ etc和/ usr / libexec。
Solaris / usr / ccs / bin应该位于GNU版本的实用程序之前还是之后,这是无法辩论的。 实际上,无论您select哪种方式,您都会偶尔遇到问题。
我使用检查和testing的组合来通过我的.bashrc / .profile在任何给定的系统上设置我的path:
首先 – 设置一个在任何地方都应该有效的基本path。 那么你需要知道你在哪里运行:
#引导
取消设置PATH
PATH = “/ USR / bin中:/ bin中:/ sbin目录:/ usr / sbin目录”
#什么是操作系统和修订?
如果[-x / bin / uname] || [-x / sbin / uname] || [-x / usr / bin / uname]; 然后
OS =`uname -s`
其他
OS = “未知”
科幻
然后你可以添加操作系统特定的path
在$ OS的情况下
Linux的)
...
;;
在SunOS |的Solaris)
ck_add2path / usr / ucb / usr / ccs / bin
;;
ESAC
其中ck_add2path被定义为:
函数add2path(){
对于$ {1 +“$ @”}中的NEWPATH; 做
如果[-z“$ PATH”]; 然后
export PATH =“$ NEWPATH”
elif [-z`echo“:$ PATH:”| grep $ NEWPATH`]; 然后
export PATH =“$ PATH:$ NEWPATH”
科幻
DONE
取消设置NEWPATH
}
函数ck_add2path(){
对于$ {1 +“$ @”}中的NEWPATH; 做
NEWPATH =`echo $ NEWPATH | sed的/ \ / \ // // // g'`
如果[-d $ NEWPATH]; 然后
add2path $ NEWPATH
科幻
DONE
取消设置NEWPATH
}
对于root用户,我会非常小心的; 我的意思是不要尝试和使用一个共同的path,如果你必须按照操作系统来做。
UNAME=`uname -s` if [ "x${UNAME}" = "xLinux" ]; then elif ....
有点额外的工作,但你不想要任何意外。
对于非root ,有这么多…
我以前的问题,特别是AIX,对于某些命令,你希望你的第三方安装优先,所以你把/ opt / bin放在/ bin之前。 后来事情就会中断,因为其他实用程序依靠PATH来为它们提供/ bin /中的本地工具。
他们在“那儿”,但是经常在/ sbin和/或/ usr / sbin中。 我的.bashrc包括:
# I'm a sysadmin, RAAR! PATH="${PATH}":/usr/sbin:/sbin # set PATH so it includes user's private bin if it exists if [ -d ~/bin ] ; then PATH=~/bin:"${PATH}" fi
我开始在修改之前保存我的旧path,以便随后调用我的启动脚本不会导致不断增加的PATH值…但是过了一段时间,我只是把它设置为一个很好的经验build立的基线。
我想X11(即使只是调用远程SSH会话的eval resize来build立COLUMNS和LINES环境variables)
我添加了/ usr / css / bin,因为我的一些裸露的solaris安装没有在path上(甚至更less的cc或gcc!)
当然,/ usr / local /path集合被添加,然后填充到我的homedir(包含和不包含架构特定path)和'。'。
带“。”的行 如果你是root的话,在path上是有问题的。
OLDPATH = / bin中:在/ usr / bin中:在/ usr / 5bin:在/ usr / BSD:在/ usr / UCB:/ sbin目录:/ usr / sbin目录
PATH = $ {} OLDPATH
PATH = $ {PATH}:在/ usr / openwin /斌:在/ usr / bin中/ X11:在/ usr /本地/ X11 / bin中
PATH = $ {PATH}:在/ usr / CCS /箱
PATH =在/ usr / local / bin目录:$ {PATH}
PATH = $ {PATH}:在/ etc:在/ usr /等:在/ usr / local / etc中
PATH =:$ {HOME} /斌/`uname`:$ {HOME} / bin中:$ {PATH}
导出PATH
到目前为止,这个设置在AIX,HPUX,IRIX,Ultrix,Solaris和Linux中都有很好的performance。 也许甚至在那些古代的阿波罗(任何人都看到/ usr / 5bin了?)
第二个是用于testing目录和添加path的dsully的编程方法。 另外,当我添加$dir到$PATH ,我通常添加$dir/../man到$MANPATH (如果存在的话)。