2009-03-27 4 views
0

私は以前に私が.profileに入れたかなり単純な機能を持っていましたが、それらをPerlスクリプトに入れて、Perlスクリプトにエイリアスを追加することに決めました。私はこれが悪い考えだと思っていますが、浮動小数点演算などのかなり複雑なので、Perlではbashよりも機能が優れています。シェルログインスクリプトやプログラムを複雑にする必要はありますか?

PATH変数に入れられているログインスクリプトや関数のベストプラクティスはありますか(セキュリティとシステムの安定性の問題に関する)?複雑な作業のためにログインスクリプトの外で機能を配布していますか、またはモノリシックなログインスクリプトがありますか?

これは、ログインスクリプトのリファクタリングの妥当性と、それが通常どのように行われているかが妥当かどうかという疑問だけに留意してください。

答えて

2

私は個人的にスクリプトディレクトリ〜/ .binを持っていて、それをPATHに~/.profileで追加し、すべての個人用スクリプトをそこに保存します。私はbashlibを持っています。私の他のすべてのスクリプトと私の便利機能がすべて入っている~/.bashrcです。

~/.profileは、私は(PATHのような)に定義に必要な環境変数だけが含まれている、と私~/.bashrcは、シェルの初期化とスクリプトの形で置くには余りにも単純化されているいくつかの関数/エイリアスが含まれています。

これらのリンクをどのように設定するかを示しています。

ちなみに、シェルの初期化の正確な説明については、http://mywiki.wooledge.org/DotFilesを参照してください。どの種類のものがどのファイルに入っているのかを示します。

+0

これはちょうど〜/ binだけでなく、bashlibを混乱させていないことを除けば、私がやることです。スクリプトだけではありません。私はCで書かれたいくつかの小さなユーティリティを持っています。これは〜/ binにもあります。 –

1

私は複雑な構造化されたプロファイルを使用しています。主な問題は、Solaris、Linux(その他の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 
1

それは、これらの機能を持っているあなたが意図スコープに完全に依存し、そして、あなたは彼らがシステムの他の部分と対話する方法。/usr/local/binに入れて(すべての人に利用可能にする)、またはあなたが望むときに(明示的に)起動する特別な起動スクリプトに入れておくことができます。

どのように範囲を決定するかを決定するまで「正しい答え」はありません。正しい答えは、「あなたが望む範囲を与える場所に配置してください」です。

+0

真。私はそれが私の個人的なシステムであると言わざるを得ないので、他のユーザーはいませんが、私はセキュリティホールを作成する機能を追加したくありません。 – bias

関連する問題