运行异构环境始终是一个挑战。如果企业拥有 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 吗?)