跨多个供应商* nix平台的通用PATH是什么?

运行异构环境始终是一个挑战。 拥有一个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 ,有这么多…

  • / {bin中,sbin目录}
  • 的/ usr / {bin中,sbin目录}
  • /select/ {料,sbin目录}
  • 在/ usr /本地/ {料,sbin目录}
  • / SW /箱

我以前的问题,特别是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 (如果存在的话)。