私はUbuntuシステムにzshをインストールしました。 zshはinitで〜/ .profileを実行していないようです。私の知る限りでは、これは自動的な振る舞いです。何が足りないの?
.profile
と.zprofile
Zshは、ログインシェルとして呼び出されると、~/.zprofile
ではなく~/.profile
を実行します。その理由は、zshには標準のシェルとの間でスクリプトを中断するのに十分な非互換性があるからです。
sh
またはksh
として呼び出された場合、Zshは~/.profile
を実行します。しかし、ログイン時にzshプロンプトを表示することが目的であれば、それは役に立ちません。
/bin/sh
をログインシェルにして、export Shell=/bin/zsh
に~/.profile
を含めることができます。それから端末を開くと、端末はzshを起動します(いくつかの端末エミュレータは$Shell
設定に従わない場合を除く)。しかし、sshを使ってログインしても、sh
は残ります。これは、exec zsh
の最後に~/.profile
を含めることで解決できます(これは実行中のShellをzshに置き換える)だけで、Xセッション開始などの他のスクリプトから~/.profile
が含まれる場合は注意してください。 (良いテストはps -o comm= $PPID
によって得られた親プロセスの名前です:もしそれがsshd
かsu
なら、それはexec
にしても安全です)。
Zshを使用して~/.profile
を実行する最も簡単な解決策は、~/.zprofile
の実行中にshエミュレーションモードに入る~/.profile
を作成することです。
emulate sh
. ~/.profile
emulate zsh
あなたが最近十分なzshを持っているなら(Ubuntu上で、それはlucid以来、つまり私は思う)、あなたはこれをemulate sh -c '. ~/.profile'
に単純化することができます。
.zprofile
と.zshrc
ファイル~/.profile
はloginシェルによってロードされます。ログインシェルは、テキストモード(テキストコンソールやsshなど)でログインしたときに開始される最初のプロセスです。デフォルトでは、大部分のLinuxマシンではログインシェルはbashですが、chsh
コマンドを使用するか、またはUbuntuの「ユーザー設定」などの他のツールを使用して変更できます。ログインシェルの場合、bashは~/.bash_profile
が存在する場合は~/.profile
を読み取りますが、zshは~/.zprofile
のみを読み取ります(その構文は従来のshと完全に互換性がないため)。ほとんどの設定では、グラフィカルディスプレイマネージャにログインすると~/.profile
もXセッション起動スクリプトによってロードされます。
端末エミュレータを起動してシェルプロンプトを表示したとき、またはシェルを明示的に起動したときは、ログインシェルではないシェルが表示されます。 ~/.profile
(または~/.zprofile
)はログイン時に実行したいコマンド用であるため、ログインしていないシェルはこのファイルを読みません。代わりに、対話型のzshを起動すると、~/.zshrc
と表示されます。 (Zshはすべての対話型シェルで~/.zshrc
を読み取りますが、ログインシェルではありません。奇妙なことに、bashはログインシェルで~/.bashrc
を読み取ることはありません)。
通常、~/.profile
には環境変数の定義が含まれており、ログイン時またはセッション全体で1回実行したいプログラムを起動することがあります。 ~/.zshrc
には、エイリアスと関数の定義、シェルオプション設定、完了設定、プロンプト設定、キー割り当てなど、すべてのシェルインスタンスに対して実行する必要があることが含まれています。
~/.profile
はzsh
によってロードされません。zsh
はログイン時に~/.zprofile
をロードします。zsh
は、新しいターミナルセッションを開始するときに~/.zshrc
をロードします。もっと情報が必要ですか? Gillesのすばらしい答えを見てください。
Gillesの答えに加えて、かなり最近のバージョンのzshではこれを行うことができます。
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'
...これは、zshのshモードを有効にして.profileファイルを取得します。そしてそれはソースの間だけアクティブです。そのため、ソーシング後に現在のオプション状態を再生するために現在のオプション状態を保存する必要はありません。
私は.zprofile
と.profile
との互換性があります(PATHの変更のみを含みます)。したがって、以下を必要とするだけです。
ln -s .profile .zprofile
私が手元に持っているzshのドキュメントには、sh/のログインシェルのための/etc/profile
と~/.profile
だけが書かれています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...