私が通常使用するシェルはzsh
です。 ls
やgrep
などの一部のプログラムで色を有効にするエイリアスがいくつかあります。また、標準以外の場所(~/bin/
など)でプログラムを実行できるように、カスタムパスを設定しました。
私は rootのシェルを変更しない をzsh
に変更しますが、これらの設定を共有して、rootも同じように設定できるようにしたいと思います。 zsh
が/etc/profile
を調達していないことがわかりました。 /etc/zsh/zprofile
で調達できますが、他の「適切な」方法が欲しいのですが。
ファイル/etc/commonprofile
を作成し、/etc/profile
と/etc/zsh/zprofile
の両方でソースを取得します。これにより、一般的な設定を共有し、bash
をそれぞれ使用する機会が得られます。zsh
特定の設定と/etc/profile
の構文zprofile
。
Zshには、POSIX shコードといくつかのbash拡張を実行できるsh互換モードがあります。 zshにない(同じ構文で)bash機能を使用しない限り、両方のシェルから同じファイルを入手できます。組み込みのemulate
を使用して、zshを互換モードにします。 -L
オプションを使用すると、エミュレーションは囲んでいる関数に対してローカルになります(囲んでいるソーススクリプトではありません)。
source_sh () {
emulate -LR sh
. "$@"
}
環境変数などの場合、source_sh /etc/profile
では/etc/zprofile
を、source_sh ~/.profile
では~/.zprofile
を使用できます。これは、プロファイルファイルがbash固有の機能を使用する可能性が低いためです。
エイリアスや関数定義などの場合、シェルのrcファイルには共有できない多くのものが含まれている可能性が高いため(プロンプト、キーバインディング、補完設定など)、~/.sh_aliases
のようなファイルを使用します。 ~/.bashrc
で提供され、source_sh
で~/.zshrc
で提供されています。
単純なシンボリックリンクはどうですか?
ln -s /etc/profile /etc/zsh/zprofile
条件付き初期化が必要な場合は、次のように追加することもできます。
#Determine our Shell without using $Shell, which may lie
Shell="sh"
if test -f /proc/mounts; then
case $(/bin/ls -l /proc/$$/exe) in
*bash) Shell=bash ;;
*dash) Shell=dash ;;
*ash) Shell=ash ;;
*ksh) Shell=ksh ;;
*zsh) Shell=zsh ;;
esac
fi
変数に関しては、モジュールとモジュールファイル[1]が不足しているようです。これを始めると、単一のモジュールファイルの便利さから、さまざまなシェル(bashとzshを含む)、python、Perl、さらに多くの環境に共通のプロファイルを簡単に作成できます。
同じ方法でエイリアスを定義することもできます。ただし、連続するシェル間でエイリアスがうまく継承されず、回避策が必要になる場合があります。
[1] http://en.wikipedia.org/wiki/Environment_Modules_(software)