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

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

运行异构环境始终是一个挑战。如果企业拥有 AIX、IRIX、HPUX、Ultrix、Solaris 和多种 Linux 版本,那么一个好的通用 PATH 设置是什么呢?它不仅允许使用一组常用命令,而且还包括默认情况下通常不存在的附加命令,如“ifconfig”、“ping”和“make”?

答案1


$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-sub shell 混乱。您希望包含所有 sbin 目录,因为重要的工具可能在那里。您希望包含 /usr/ccs/bin:/usr/ucb,因为 Solaris 会将一些您可能使用的东西放在其中。

值得注意的是,缺少了软件本地安装的无限选择,例如 GNU 工具 - 通常您希望它们在系统版本之前位于 PATH 中。此外,我遗漏了更可能作为历史珍品有用的目录,例如 /etc 和 /usr/libexec。

关于 Solaris /usr/ccs/bin 应该位于 GNU 版本的实用程序之前还是之后,一直存在争议。实际上,无论你选择哪种方式,你都会因此偶尔遇到问题。

答案2

我使用检查和测试的组合来通过我的 .bashrc/.profile 在任何给定系统上设置我的路径:

首先 - 设置一个在任何地方都有效的基本路径。然后你需要知道你在哪里运行:

# 引导程序
取消设置 PATH
PATH="/usr/bin:/bin:/sbin:/usr/sbin"

# 操作系统和修订版本是什么?
如果 [ -x /bin/uname ] || [ -x /sbin/uname ] || [ -x /usr/bin/uname ]; 那么
    操作系统=`uname -s`
别的
    操作系统=“未知”

然后您可以添加操作系统特定的路径:

案例 $OS 在
    Linux 系统
        ...
    ;;
    SunOS|Solaris)
        ck_add2path /usr/ucb /usr/ccs/bin
    ;;
埃萨克

其中 ck_add2path 定义为:

函数 add2path () {
    对于 ${1+"$@"} 中的 NEWPATH;执行
        如果 [ -z "$PATH" ] ; 那么
            导出 PATH="$NEWPATH"
        elif [ -z `echo ":$PATH:"|grep $NEWPATH` ] ; 然后
            导出 PATH="$PATH:$NEWPATH"
    完毕
    取消设置 NEWPATH
}

函数 ck_add2path(){
    对于 ${1+"$@"} 中的 NEWPATH;执行
        NEWPATH =`echo $NEWPATH | sed's/\/\//\//g'`
        如果 [ -d $NEWPATH ]; 那么
            添加2路径$NEWPATH
    完毕
    取消设置 NEWPATH
}

答案3

对于root用户,我会非常小心;我的意思是不要尝试使用通用路径,如果必须的话,请按操作系统执行。

UNAME=`uname -s`
if [ "x${UNAME}" = "xLinux" ]; then
elif ....

虽然需要做一些额外的工作,但您不希望有任何意外。

对于非来说root,有很多...

  • /{bin,sbin}
  • /usr/{bin,sbin}
  • /opt/{bin,sbin}
  • /usr/local/{bin,sbin}
  • /sw/bin

我过去遇到的问题(特别是使用 AIX 时)是,对于某些命令,您希望第三方安装优先,因此您将 /opt/bin 放在 /bin 之前。后来事情就发生了变化,因为其他实用程序依赖 PATH 为它们提供 /bin/ 中的本机工具。

答案4

在修改旧路径之前,我先保存了它,这样对启动脚本的后续调用就不会导致 PATH 值不断增加……但是过了一段时间,我最终只是将它设置为一个很好的经验建立的基线。

我想要 X11(即使只是resize在远程 ssh 会话中调用 eval 来建立 COLUMNS 和 LINES 环境变量)

我添加了 /usr/css/bin,因为我的一些裸 solaris 安装在路径中没有 make(甚至更少有 cc 或 gcc!)

当然,添加了 /usr/local/ 路径集,然后在我的主目录中添加了内容(带有和不带有特定于体系结构的路径)和“。”。

但是,如果您是 root 的话,路径中带有 '.' 的行是有问题的。

OLDPATH=/bin:/usr/bin:/usr/5bin:/usr/bsd:/usr/ucb:/sbin:/usr/sbin
路径=${OLDPATH}
PATH=${PATH}:/usr/openwin/bin:/usr/bin/X11:/usr/local/X11/bin
PATH=${PATH}:/usr/ccs/bin
PATH=/usr/local/bin:${PATH}
PATH=${PATH}:/etc:/usr/etc:/usr/local/etc
PATH=.:${HOME}/bin/`uname`:${HOME}/bin:${PATH}
导出路径

到目前为止,此设置在 AIX、HPUX、IRIX、Ultrix、Solaris 和 Linux 上都运行良好。甚至在那些古老的阿波罗上也运行良好(还有人看到 /usr/5bin 吗?)

相关内容