私が一般的に使用するシェルには、zsh
などの特定のプログラムで色を有効にするためのいくつかのエイリアスがあります。などの非標準の場所でもプログラムを実行できるように、カスタムパスも設定しました。ls
grep
~/bin/
私ルートのシェルを変更しません。しかし、zsh
rootもこれを持つようにこれらの設定を共有したいと思います。私はこれがzsh
購入ではないことを発見しました/etc/profile
。私はそれを調達することができますが、/etc/zsh/zprofile
もう少し「正しい」別の方法が欲しいです。
答え1
ファイルを作成して/etc/commonprofile
andにインポートします。これにより、共通設定を共有しながら特定の設定と構文を個別に使用できます。/etc/profile
/etc/zsh/zprofile
bash
zsh
/etc/profile
zprofile
答え2
Zshには、POSIX shコードといくつかのbash拡張を実行できるsh互換モードがあります。 zsh にない bash 関数 (同じ構文を使用) を使用しない限り、両方のシェルが提供する同じファイルを持つことができます。組み込み機能を使用してemulate
zshを互換モードに切り替えます。この-L
オプションを使用すると、エミュレーションは閉じたソーススクリプトではなく、閉じた関数のローカルエミュレーションです。
source_sh () {
emulate -LR sh
. "$@"
}
環境変数と同じ場合、設定ファイルはbash関連の機能を使用する可能性が低いため、source_sh /etc/profile
in/etc/zprofile
とsource_sh ~/.profile
outを使用できます。~/.zprofile
エイリアスや関数定義などの場合、シェルrcファイルには共有できない多くの項目(プロンプト、キーバインディング、完成設定など)が含まれる可能性があるため、から始まり、~/.sh_aliases
「~/.bashrc
d source_sh
」のファイルを使用してください~/.zshrc
。
答え3
単純なシンボリックリンクはどうですか?
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
答え4
変数に関しては、モジュールとモジュールファイル[1]が欠けているようです。この作業を開始すると、単一モジュールファイルの利便性により、さまざまなシェル(bashとzshを含む)、Python、Perl、およびより多くの環境用の共通設定ファイルを簡単に作成できます。
エイリアスも同じ方法で定義できます。しかし、エイリアスは連続シェル間でうまく継承されないため、解決策が必要になる可能性があることがすぐにわかります。
[1]http://en.wikipedia.org/wiki/Environment_Modules_(ソフトウェア)