回答:
.profile
対 .zprofile
ログインシェルとして呼び出された場合~/.zprofile
、Zshは実行されますが、ではありません~/.profile
。その理由は、zshには標準のシェルとの非互換性が十分にあり、スクリプトが壊れるからです。
または~/.profile
として呼び出された場合、Zshは実行されます。ただし、ログイン時にzshプロンプトを表示することが目的の場合、それは役に立ちません。sh
ksh
/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
エイリアスと関数の定義、シェルオプション設定、完了設定、プロンプト設定、キーバインディングなど、すべてのシェルインスタンスに対して実行する必要があるものが含まれています。
~/.profile
zsh
ログイン時にロードされません。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...