Работа в гетерогенной среде всегда является проблемой. Имея предприятие с AIX, IRIX, HPUX, Ultrix, Solaris и несколькими разновидностями Linux, что является хорошей универсальной настройкой PATH, которая позволяет использовать хороший общий набор команд, но также включает дополнительные функции, такие как ifconfig, ping , и make, которых часто нет по умолчанию?
$HOME/bin:$HOME/sbin:/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/ccs/bin:/usr/ucb
В частности, вы не хотите слепо добавлять $ PATH в .bashrc, иначе у вас будет беспорядок в оболочке sub-sub-sub-sub. Вы хотите включить все каталоги sbin, потому что там могут быть важные инструменты. Вы хотите включить / usr / ccs / bin: / usr / ucb, поскольку Solaris помещает туда несколько вещей, которые вы, вероятно, будете использовать.
В частности, отсутствуют бесконечные варианты выбора для локальных установок программного обеспечения, например инструменты GNU - обычно вы хотите, чтобы они были в PATH перед версиями системы. Кроме того, я исключил каталоги, которые, скорее всего, будут полезны в качестве исторического любопытства, такие как / etc и / usr / libexec.
Это бесконечно спорно, должен ли Solaris / USR / к.х.н. / бен быть до или после версии GNU утилит. На самом деле, из-за этого у вас будут периодические проблемы, независимо от того, какой путь вы выберете.
Я использую комбинацию проверок и тестов, чтобы установить свой путь в любой данной системе через мой .bashrc / .profile:
Во-первых - установите базовый путь, который должен быть действителен где угодно. Тогда вам нужно знать, куда вы бежите:
# Bootstrap unset PATH PATH="/usr/bin:/bin:/sbin:/usr/sbin" # What is the OS and Revision? if [ -x /bin/uname ] || [ -x /sbin/uname ] || [ -x /usr/bin/uname ]; then OS=`uname -s` else OS="unknown" fi
Затем вы можете добавить пути, специфичные для ОС:
case $OS in Linux) ... ;; SunOS|Solaris) ck_add2path /usr/ucb /usr/ccs/bin ;; esac
Где ck_add2path определяется как:
function add2path () { for NEWPATH in ${1+"$@"}; do if [ -z "$PATH" ] ; then export PATH="$NEWPATH" elif [ -z `echo ":$PATH:"|grep $NEWPATH` ] ; then export PATH="$PATH:$NEWPATH" fi done unset NEWPATH } function ck_add2path () { for NEWPATH in ${1+"$@"}; do NEWPATH=`echo $NEWPATH | sed 's/\/\//\//g'` if [ -d $NEWPATH ]; then add2path $NEWPATH fi done unset 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 ... Но через некоторое время я просто установил для него хороший эмпирически установленный базовый уровень.
Я хотел X11 (хотя бы для вызова eval resize
на удаленных сеансах ssh для установки переменных среды 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 PATH=${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} export PATH
Эта установка хорошо зарекомендовала себя в AIX, HPUX, IRIX, Ultrix, Solaris и Linux. Может быть, даже на тех древних аполлонах (кто-нибудь уже видел / usr / 5bin?)
Я поддерживаю программный подход Dsully к тестированию каталогов и добавлению путей. Кроме того, когда я добавляю $dir
к $PATH
, Я обычно добавляю $dir/../man
к $MANPATH
(если он существует).