2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

direnvのインストール手順 hook direnv into your shell. について調べてみた

Last updated at Posted at 2024-11-04

direnvは、ディレクトリ毎に環境変数を定義することで、ディレクトリがカレントになった時だけ環境変数を有効にできるツールです。

インストール手順hook direnv into your shell.で設定している内容が気になったため、少し調べてみました。

hook direnv into your shell.で何をしているの?

Bashの場合、~/.bashrcファイルの末尾にeval "$(direnv hook bash)"を追加しています。

Add the following line at the end of the ~/.bashrc file:
eval "$(direnv hook bash)"

それでは、~/.bashrcファイルとeval "$(direnv hook bash)"についてそれぞれ調べていきましょう。

~/.bashrcファイルとは

Bashのマニュアル6.2 Bash Startup Filesに記載があり、Bashが対話型シェルとして起動される時に読み込まれるファイルです。

Invoked as an interactive non-login shell
When an interactive shell that is not a login shell is started, Bash reads and executes commands from ~/.bashrc, if that file exists.

eval "$(direnv hook bash)"とは

こちらはもう少し分解して調べた方がよさそうです。
以下の要素に分解して調べていきましょう。

  • eval
  • ""
  • $()
  • direnv hook bash

evalとは

Bashのマニュアル4.1 Bourne Shell Builtinsに記載があり、引数に記載したコマンドを読み込み実行することができます。

eval [arguments]
The arguments are concatenated together into a single command, which is then read and executed, and its exit status returned as the exit status of eval. If there are no arguments or only empty arguments, the return status is zero.

""とは

Bashのマニュアル3.1.2.3 Double Quotesに記載があり、二重引用符("")の中ではパラメータとコマンドの置換が行われます。

Enclosing characters in double quotes (‘"’) preserves the literal value of all characters within the quotes, with the exception of ‘$’, ‘`’, ‘\’, and, when history expansion is enabled, ‘!’.

$()とは

Bashのマニュアル3.5.4 Command Substitutionに記載があり、$()で括られたコマンドはそのコマンドの出力に置き換えられます。

Command substitution allows the output of a command to replace the command itself. Command substitution occurs when a command is enclosed as follows:
$(command)

また、$()を二重引用符で囲むことで、出力が単語に分割されず単一の文字列としてシェルの入力に渡されます。

If the substitution is not enclosed in double quotes, the output is broken into words using the IFS parameter.

前述した""を併用し"$()"とすることで、コマンド置換の出力を単一の文字列としてシェルに渡すことができます。

direnv hook bash とは

direnvのhookコマンドです。引数にbashを指定することでBash用のフックを設定するためのスクリプトを出力しています。
コマンドの詳細はdirenvのGitHubで確認できますが今回は割愛させていただきます。

eval "$(direnv hook bash)"についてまとめ

各要素に分解して調べた結果をまとめます。

  • direnv hook bashBash用のフックを設定するためのスクリプトを出力する
  • eval "$()"上記出力を単一の文字列としてシェルに渡し実行する

hook direnv into your shell.でしていること

~/.bashrcファイルとeval "$(direnv hook bash)"についてそれぞれ調べた結果から、Bashの起動時に、Bash用のフックを設定するためのスクリプトを実行していることがわかりました。

まとめ

いかがでしたでしょうか?

hook direnv into your shell.でしていることについてはわかりましたが、direnvのhookコマンドで出力されるBash用のフックを設定するためのスクリプトが何をしているのかも気になりました。

次は、Bash用のフックを設定するためのスクリプトについても調べてみたいと思います。

参考情報

direnv
Bash Reference Manual

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?