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


24

私が通常使用するシェルはzshです。lsやなどの一部のプログラムで色を有効にするエイリアスがいくつかありますgrep。また、カスタムパスを設定して、標準ではない場所(など~/bin/)でプログラムを実行できるようにしました。

私は、rootのシェルを変更しないだろうzsh、それがルートだけでなく、それを持つことができますので、私はこれらの設定を共有したいと思います。zsh調達していないことがわかります/etc/profile。でソースできますが/etc/zsh/zprofile、他の「適切な」方法が必要です。

回答:


16

私は、ファイルを作成したい/etc/commonprofileとの両方で、それをソース/etc/profile/etc/zsh/zprofile。これはあなたに共通の設定を共有し、まだ使用する機会与えbash、それぞれzshに固有の設定と構文を/etc/profileそれぞれzprofile


他の良い答えの中で、これは私に最も適した、比較的シンプルで「クリーン」なものだと思う
プネヘヘ

「ソース」とはどういう意味ですか?
フルン

@Hlungシェルプロファイルの説明をロードするために、ここに「source /path/to/.shell_profile」があります。「ソース」のマニュアルページを参照してください。
イタチ

17

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

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

環境変数などの場合、プロファイルファイルはbash固有の機能を使用する可能性が低いため、source_sh /etc/profilein /etc/zprofileおよびsource_sh ~/.profileinを使用でき~/.zprofileます。

エイリアスと関数定義のようなものについては、シェルのrcファイルを共有することができないものがたくさん含まれている可能性があるので、(プロンプト、キーバインディング、完了の設定を、...)、のようなファイルを使用~/.sh_aliasesして供給されている~/.bashrcsource_shD「をで~/.zshrc


2
「すべての回答をGillesが自動的に支持する」と言う方法が必要です。これにより、かなりの時間を節約できます。いいえ、答えは揺れます。常に正確で、よく書かれた包括的なものです。
fschmitt

@fschmitt:同意します。そして、あなたはそれが編集されていないことを見ることができます!ここで提供されるこのヒントは本当に良いです。
誰かがまだあなたを使用していますMS-DOS

4

シンプルなシンボリックリンクはどうですか?

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

うーん、でもこれは調達するよりもきれいになるとは思いません。zshとbashの両方が読み取るファイルはありますか?
プネヘヘ

シンボリックリンクの調達または作成が「クリーンな」ソリューションではないと思う理由は何ですか?
echox

必要に応じて、シンボリックリンクを管理するのではなく、ファイルのソースを取得したいだけです。ファイル間に多くの依存関係を作りたくありません。
プネヘヘ

1
よりポータブルな代替手段/bin/ls -l /proc/$$/exeps -o comm= -p $$です。一部のシェルは、起動方法によって動作が異なるため、これは完全に信頼できるものではありません。実際には、単にテストする$0には.profile、より良い兆候である可能性が高いです。しかし、いくつかの変数をテストして便利な機能を(bashのは、kshの、zshのは)簡単に認識することができます(とそのバージョンを特定し、大きなプラスである)を提供し、ほとんどのシェルに:$BASH$BASH_VERSION$BASH_VERSINFO; $KSH_VERSION${.sh.version}; $ZSH_VERSION
ジル 'SO-悪であるのをやめる

echox、caseステートメントはzsh4を正しく検出しません。#SHELLを使用せずにシェルを決定します。test-f / proc / mounts; 次に、bashの $(/ bin / ls -l / proc / $$ / exe)の場合 )shell = bash ;; * dash)shell = dash ;; * ash)shell = ash ;; * ksh)shell = ksh ;; * zsh)shell = zsh ;; #matches zsh4 esac fi
ブライアンハント

0

変数に関しては、モジュールとモジュールファイルが欠落しているという印象があります[1]。一度開始すると、単一のモジュールファイルの利便性から、さまざまなシェル(bashおよびzshを含む)、python、perl、さらに多くの環境用の共通プロファイルを簡単に作成できます。

同じ方法でエイリアスを定義することもできます。ただし、連続するシェル間ではエイリアスがあまりうまく継承されないため、回避策が必要になる場合があります。

[1] http://en.wikipedia.org/wiki/Environment_Modules_(software)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.