回答:
.profile 対 .zprofileログインシェルとして呼び出された場合~/.zprofile、Zshは実行されますが、ではありません~/.profile。その理由は、zshには標準のシェルとの非互換性が十分にあり、スクリプトが壊れるからです。
または~/.profileとして呼び出された場合、Zshは実行されます。ただし、ログイン時にzshプロンプトを表示することが目的の場合、それは役に立ちません。shksh
/bin/shログインシェルを作成export SHELL=/bin/zshして、~/.profile。次に、ターミナルを開くと、ターミナルはzshを起動します(いくつかのターミナルエミュレーターが$SHELL設定に従わない場合を除く)。ただしsh、sshを介してログインした場合も引き続き使用できます。これはexec zsh、最後に含めることで修正できます~/.profile(実行中のシェルをzshに置き換えます)が~/.profile、Xセッション開始などの他のスクリプトから含まれている場合ではなく、対話型ログインに対してのみ行うように注意する必要があります(良いtestは、次の方法で取得した親プロセスの名前ですps -o comm= $PPID:sshdまたはの場合su、安全ですexec)。
zshとrunの両方を使用する最も簡単な解決策~/.profileは、実行~/.zprofile中にshエミュレーションモードに入るaを作成することです~/.profile。
emulate sh
. ~/.profile
emulate zsh
最新の十分なzshがある場合(Ubuntu上では、明快だからだと思います)、これをに簡略化できますemulate sh -c '. ~/.profile'。
.zprofile 対 .zshrcファイル~/.profileはログインシェルによってロードされます。ログインシェルは、たとえばテキストコンソールまたはsshを介してテキストモードでログインしたときに開始される最初のプロセスです。デフォルトでは、ほとんどのLinuxマシンではログインシェルはbashですが、chshコマンドを使用するか、Ubuntuの「ユーザー設定」などの他のツールを使用して変更できます。ログインシェルの~/.bash_profile場合、bashはそれが存在するかどうかを~/.profile読み取り、zshは読み取りのみを~/.zprofile行います(構文は従来のshと完全には互換性がないため)ほとんどの構成で~/.profileは、グラフィカルディスプレイマネージャーにログインしたときにXセッションスタートアップスクリプトによって読み込まれます。
端末エミュレータを起動してシェルプロンプトを表示するか、シェルを明示的に起動すると、ログインシェルではないシェルが表示されます。以降~/.profile(または~/.zprofile)あなたがログインしたときに実行するコマンドのためである、非ログインシェルがこのファイルを読み取れません。代わりに、対話型zshを起動すると、読み取ります~/.zshrc。(Zsh ~/.zshrcは、ログインシェルであるかどうかに関係なく、すべてのインタラクティブシェルを読み取り~/.bashrcます。奇妙なことに、bash はログインシェルを読み取りません。)
通常、~/.profile環境変数の定義が含まれており、ログイン時またはセッション全体で一度実行したいプログラムを開始する場合があります。~/.zshrcエイリアスと関数の定義、シェルオプション設定、完了設定、プロンプト設定、キーバインディングなど、すべてのシェルインスタンスに対して実行する必要があるものが含まれています。
~/.profilezshログイン時にロードされません。zsh~/.zprofileログイン時にロードします。zsh~/.zshrc新しい端末セッションを開始するときにロードします。さらに情報が必要ですか?ジルのすばらしい答えを見てください!
Gillesの答えに加えて、zshのかなり最近のバージョンでこれを行うことができます。
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'
... zshのshモードが有効になっている.profileファイルをソースします。そして、それはソースの間だけアクティブです。したがって、ソーシング後に再度再生するために、現在のオプションの状態を保存する必要はありません。
私は(PATHの変更のみを含む).zprofileと互換性がある.profileので、必要なのは以下だけです:
ln -s .profile .zprofile
zshのの私が手に持っているドキュメントにのみ言及/etc/profileして~/.profileでログインシェルのためのsh / kshのの互換モード。
% zsh --version
zsh 4.3.10 …
% cat ~/.profile
echo 'Running ~/.profile...'
ネイティブモードログインシェル(argv [0]で始まる-)は使用しません~/.profile(~/.zprofileただし使用します):
% zsh -c 'exec -a -zsh zsh' </dev/null
(出力なし)
SH / kshのの互換性モードのログインシェルの.profile使用しています:
% zsh -c 'exec -a -sh zsh' </dev/null
Running ~/.profile...
% zsh -c 'exec -a -ksh zsh' </dev/null
Running ~/.profile...