web-dev-qa-db-ja.com

編集後、 `.zshrc`ファイルに変更を適用するにはどうすればよいですか?

FreeBSDで zsh を設定するために.zshrcファイルを編集しました。

たとえば、PATHシステム変数を更新します。

path+=/usr/local/openjdk12/bin

変更を有効にするにはどうすればよいですか?

ログアウトして再度ログインする必要がありますか?そのファイルをすぐに実行する方法はありますか?

6
Basil Bourque

Zshを再起動します

Zshは起動時に_.zshrc_を読み取ります。ログアウトして再度ログインする必要はありません。ターミナルを閉じて新しいターミナルを開くだけで、この新しいターミナルで新しい_.zshrc_が得られます。しかし、これをより直接的にすることができます。自分自身を再起動するようにzshに指示します。

_exec zsh
_

これをzshプロンプトで実行すると、zshの現在のインスタンスが、同じターミナルで実行されている新しいインスタンスに置き換えられます。新しいインスタンスには、前のインスタンスと同じenvironment変数がありますが、新しいShell(エクスポートされていない)変数があり、新しい履歴が開始されます(したがって、典型的な構成で他の端末からのコマンドで)。バックグラウンドジョブはすべて否認されます。

再度読む_.zshrc_

Zshに_.zshrc_を再度読み取るように指示することもできます。これには、シェルの履歴、シェル変数、およびバックグラウンドジョブの知識を保持するという利点があります。しかし、_.zshrc_に何を入力するかによって、これは機能する場合と機能しない場合があります。 _.zshrc_を再度読み取ると、コマンドを2回実行すると機能しない、または機能しないコマンドが実行されます。

_. ~/.zshrc
_

それを2回実行できるようにしたい場合、_.zshrc_に入れても大丈夫ではないすべてを列挙するためにできることは多すぎます。以下はsomeの一般的な問題です。

  • 変数に追加する場合(例:fpath+=(~/.config/zsh)またはchpwd_functions+=(my_chpwd))、これは同じ要素を再度追加しますが、これは問題になる場合とそうでない場合があります。
  • エイリアスを定義し、コマンドと同じ名前を使用すると、コマンドはエイリアスを実行するようになります。たとえば、これは機能します:
    _function foo { … }
    alias foo='foo --common-option'
    _
    しかし、ファイルは2回目に読み込まれるため、foo ()はエイリアスを展開します:
    _foo () { … }
    alias foo='foo --common-option'
    _
  • 既存のzsh関数にパッチを適用する場合、独自のバージョンにパッチを適用することになり、混乱を招く可能性があります。
  • 「2つのキーのバインディングを入れ替える」などの操作を行った場合、2回目の操作ではうまくいきません。

シェルの初期化ファイルへの変更は、たとえば、新しいグラフィカル端末を起動したり、ログアウトして再度ログインしたりした場合に、起動するnextシェルでアクティブになります。デスクトップ環境に何らかの影響を与える変更を加えた場合(どのような変更が可能かはわかりません)、ログアウトして再度ログインする必要があります。

あなたはcould. /path/to/filename(この場合は. ~/.zshrc)を使用してファイルをソースするか、zshを使用してコマンドラインから新しいシェルセッションを開始しますが、これはほとんど$PATH変数に重複したパスを追加したり、余分なssh-agentプロセスを開始したり、そのファイルで何をしているのかなど、望ましくない結果が生じる可能性があるため、決して良い考えではありません。変更は、既に開始されているプログラムにも表示されません。

無条件に$PATHに追加するだけのような変更の場合、現在のシェルで追加されたコマンドを実行するだけでよいことは明らかです。

$ path+=/usr/local/openjdk12/bin

これは(zshで)/usr/local/openjdk12/binディレクトリを$PATHの末尾(およびzsh$path配列の末尾)に追加します。現在のシェルセッション。繰り返しますが、$PATHへのこの変更は、すでに実行中のプロセスには影響しません。

4
Kusalananda

新しいファイルを読み込むことができます。これは、(他の行に応じて)PATH変数の更新を含む、いくつかの変更で機能します。ただし、それをソーシングすると単に.zshrcが再び実行され、予期しない重複したコマンドが実行される可能性があります。さらに、古い.zshrcから削除された行がある場合、それらはセッションから「消去」されません。

最もクリーンな方法は、ログアウトして再度ログインすることです。これは、デスクトップ環境全体ではなく、ターミナルセッションに対してのみ行う必要があります。

3
Sparhawk