Должен ли я добавить сложную функциональность в сценарий входа в оболочку или отдельные программы? - PullRequest
0 голосов
/ 27 марта 2009

У меня довольно много простых функций, которые я ранее сохранил в своем .profile , но я решил поместить их в сценарии Perl и добавить псевдонимы в сценарии Perl. Я чувствую, что это плохая идея, но функциональность выглядит / лучше в Perl, чем в bash, поскольку она довольно сложна (включает математические операции с плавающей запятой и т. Д.).

Существуют ли передовые практики для сценариев входа и / или функций, которые помещаются в переменную PATH (в отношении как безопасности, так и проблем со стабильностью системы)? Распределяете ли вы функциональность за пределами сценария входа для сложных задач или у вас есть монолитный сценарий входа?

Я полагаю, что это можно перевести на вопрос о правильности рефакторинга сценария входа в систему и о том, насколько он действителен, как обычно.

Ответы [ 3 ]

2 голосов
/ 28 марта 2009

У меня лично есть каталог сценариев ~ / .bin, я добавляю его в PATH в ~ / .profile и храню там все свои личные сценарии. У меня есть bashlib , созданный всеми моими другими сценариями, и ~ / .bashrc , который содержит все мои вспомогательные функции.

My ~ / .profile содержит только те переменные окружения, которые мне нужно определить (например, PATH), а мой ~ / .bashrc содержит инициализацию оболочки и несколько функций / псевдонимов, которые слишком упрощенно, чтобы поместить в форме сценария.

Ссылки показывают, как я настраиваю эти файлы.

Кстати, обратитесь к http://mywiki.wooledge.org/DotFiles для описания того, как именно происходит инициализация оболочки; и какие типы вещей идут в какие файлы.

1 голос
/ 27 марта 2009

Это полностью зависит от области действия этих функций и от того, как вы хотите, чтобы они взаимодействовали с остальной системой. Вы можете зайти так далеко, что поместите их в / usr / local / bin (сделав их доступными для всех) или поместив их в специальный стартовый скрипт, который вы вызываете (явно) только тогда, когда вы этого хотите.

Не существует «правильного ответа», пока вы не определите, как вы хотите охватить их, а затем правильный ответ «поместите их в то место, которое дает вам желаемый объем».

1 голос
/ 27 марта 2009

У меня сложный структурированный профиль - с загруженными скриптами. Основная проблема заключается в загрузке системы во всех различных средах, где она используется - Solaris, Linux (misc h / w), HP-UX, AIX ...

Я использую оболочку Korn - но принципы применимы к bash (и она прекрасно работает с bash):

#!/bin/ksh
#
#   @(#)$Id: profile,v 6.8 2007/09/24 18:20:26 jleffler Exp $
#
#   Generic profile for Jonathan Leffler (JL)
#
#   Copyright (C) JLSS 1989-93,1995-99,2002,2005,2007

#TABSTOP=4

# Set machine-specific environment
mc=`uname -n`
if [ -r $HOME/.$mc ]
then
    . $HOME/.$mc
fi
unset mc

# Set basic environment
: ${INFORMIXDIR:=/usr/informix}         ; export INFORMIXDIR
: ${REAL_HOME:=$HOME}                   ; export REAL_HOME

# Machine-configurable PATH setting
for mcsetpath in ${REAL_HOME}/bin/mcsetpath ${HOME}/bin/mcsetpath
do
    if [ -r $mcsetpath ]
    then
        . $mcsetpath                    # Set PATH
        break;
    fi
done
unset mcsetpath

. libpath                               # Set LD_LIBRARY_PATH
. ttyset                                # Set STTY values
. kshrc                                 # Set KSH environment
. cdpath                                # Set CDPATH
. exinit                                # Set EXINIT
. termset                               # Set TERM type
. ixenviron                             # Set INFORMIX environment
. ccenviron                             # Set ClearCase environment
. setprompt                             # Set prompt
. manpath                               # Set MANPATH

umask 022

# Set group-specific environment
group=`id | sed 's/.* gid=[0-9]*(\([^)]*\)).*/\1/'`
if [ -f "$REAL_HOME/.$group" ]
then
    . $REAL_HOME/.$group
fi

# Set user-specific environment -- assume LOGNAME or USER set OK
# Beware Linux: by default, username = group name so things get done twice!
: ${LOGNAME:=${USER:-jleffler}}
export LOGNAME
if [ "$group" != "$LOGNAME" ] && [ -f "$REAL_HOME/.$LOGNAME" ]
then
    . $REAL_HOME/.$LOGNAME
else
    cd
    case "$-" in
    *c*)    : OK;;
    *)      echo "User $LOGNAME logged in to `pwd` at `date`";;
    esac
    trap "clear; exit 0" 0
fi
unset group
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...