zshとbashの間でエイリアスとPATH設定を共有する

zshとbashの間でエイリアスとPATH設定を共有する

私が一般的に使用するシェルには、zshなどの特定のプログラムで色を有効にするためのいくつかのエイリアスがあります。などの非標準の場所でもプログラムを実行できるように、カスタムパスも設定しました。lsgrep~/bin/

ルートのシェルを変更しません。しかし、zshrootもこれを持つようにこれらの設定を共有したいと思います。私はこれがzsh購入ではないことを発見しました/etc/profile。私はそれを調達することができますが、/etc/zsh/zprofileもう少し「正しい」別の方法が欲しいです。

答え1

ファイルを作成して/etc/commonprofileandにインポートします。これにより、共通設定を共有しながら特定の設定と構文を個別に使用できます。/etc/profile/etc/zsh/zprofilebashzsh/etc/profilezprofile

答え2

Zshには、POSIX shコードといくつかのbash拡張を実行できるsh互換モードがあります。 zsh にない bash 関数 (同じ構文を使用) を使用しない限り、両方のシェルが提供する同じファイルを持つことができます。組み込み機能を使用してemulatezshを互換モードに切り替えます。この-Lオプションを使用すると、エミュレーションは閉じたソーススクリプトではなく、閉じた関数のローカルエミュレーションです。

source_sh () {
  emulate -LR sh
  . "$@"
}

環境変数と同じ場合、設定ファイルはbash関連の機能を使用する可能性が低いため、source_sh /etc/profilein/etc/zprofilesource_sh ~/.profileoutを使用できます。~/.zprofile

エイリアスや関数定義などの場合、シェルrcファイルには共有できない多くの項目(プロンプト、キーバインディング、完成設定など)が含まれる可能性があるため、から始まり、~/.sh_aliases~/.bashrcd 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_(ソフトウェア)

関連情報