Zshが〜/ .profileにヒットしない


145

Ubuntuシステムにzshをインストールしました。zshはinitで〜/ .profileを実行していないようです。私の知る限り、これは自動的な動作です。私は何が欠けていますか?

回答:


204

.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= $PPIDsshdまたはの場合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エイリアスと関数の定義、シェルオプション設定、完了設定、プロンプト設定、キーバインディングなど、すべてのシェルインスタンスに対して実行する必要があるものが含まれています。


素晴らしい答えです!〜/ .zprofileを作成し、提案どおりに行を追加しましたが、何も実行されないようです。おそらく.zshrcに入れるべきですか?
-shmichael

1
@shmichael:あなたの反応を考えると、私はあなたの質問をあなたが意図したように解釈しなかったかもしれません。回答に追加した2番目のセクションは役立ちますか?
ジル

はい、その場に行きます。したがって、正しく理解できれば、たとえば.zprofileでのPATH宣言や.zshrcでのエイリアスが必要になります。
-shmichael

@ user1419674修正していただきありがとうございますが、変更ログを投稿に追加しないでください。このサイトには、改訂履歴が組み込まれています。
ジル14年

69

せっかちな人のための短い答え:

  1. ~/.profilezshログイン時にロードされません。
  2. zsh~/.zprofileログイン時にロードします。
  3. zsh~/.zshrc新しい端末セッションを開始するときにロードします。

さらに情報が必要ですか?ジルのすばらしい答えを見てください!


素晴らしい答え。必要なものだけ。
ジャンゴラインハルト

21

Gillesの答えに加えて、zshのかなり最近のバージョンでこれを行うことができます。

[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'

... zshのshモードが有効になっている.profileファイルをソースします。そして、それはソースの間だけアクティブです。したがって、ソーシング後に再度再生するために、現在のオプションの状態を保存する必要はありません。


〜/ .zprofileにこれがありますが、何らかの理由で〜/ .profileのステートメントがシェルで使用できません。Ubuntu 15.04; zsh 5.0.7
friederbluemle

コードなしで診断するのは難しい。
フランクターベック

もう一度試してみましたが、今は機能しているようです。ある時点で修正されたのか、何が起こったのかはわかりません。zshバージョンは現在5.1.1です。
friederbluemle


0

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