yuman211
@yuman211 (yuki numata)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Zsh パスについて

Q&A

Closed

解決したいこと

.zshrcにパスを通そうとしたときに書き方によって通る通らないがあり、なぜそのような違いが出るのか、またどの書き方が正しいのかを知りたい。

経緯

laravelコマンドを使用するため、.zshrcファイルにパスを通す方法を調べ、以下の記事を参考にした。
https://qiita.com/k3ntar0/items/eb8cdbd8eba9da388def

export PATH=~/.composer/vendor/bin:$PATH

上のような記事の書き方でパスを通すことができた。
しかし、下のように.zshrcファイルにいつの間にか入っていた二つのパスはダブルクオーテーションで囲まれていた。

export PATH="/usr/local/opt/php@7.4/bin:$PATH"
export PATH="/usr/local/opt/php@7.4/sbin:$PATH"

どちらが正しい書き方なのでしょうか。

自分で試したこと

まずとりあえず同じ書き方で書いてみたのですが、

export PATH="~/.composer/vendor/bin:$PATH"

この場合パスは通りましたが、ターミナルを落とすと、なぜかパスが通らなくなってしまう現象が起きました。

調べてみましたが、ダブルクオーテーションで囲むと環境変数が展開されると説明があり、だからなんだとなってしまいました...

0

2Answer

export PATH=~/.composer/vendor/bin:$PATH

export PATH="/usr/local/opt/php@7.4/bin:$PATH"
export PATH="/usr/local/opt/php@7.4/sbin:$PATH"

これらはどれも(あなたの期待通りのパスに設定できるという意味で)正しい書き方です。

しかし、内容によってはダブルクォートの有無が影響することもあります。ダブルクォートなしで

export PATH=~/.composer/vendor/bin:$PATH

と書くと、 ~ はまずホームディレクトリを指す文字列に展開されます。よって

export PATH=/Users/ユーザー名/.composer/vendor/bin:$PATH

と書いたのと同じことになります。一方、ダブルクォートありで

export PATH="~/.composer/vendor/bin:$PATH"

と書くと、 ~ は展開されず、文字通り ~ という名前のディレクトリを指すことになります。この名前のディレクトリは普通存在しないのでパスは通りません。(”この場合パスは通りましたが“というのはおそらく勘違いでしょう。)

よって、 ~ を含むパスを設定するときはダブルクォートを書かないのが正しい書き方です。また、 ~ の代わりにホームディレクトリを指す変数 $HOME を使うこともできます。これはダブルクォートの有無にかかわらず展開されます。

# どちらも期待通りパスが通る
export PATH=$HOME/.composer/vendor/bin:$PATH
export PATH="$HOME/.composer/vendor/bin:$PATH"
2Like

Comments

  1. @yuman211

    Questioner

    なるほど!そういうことだったんですね。
    とてもわかりやすく説明していただき、ありがとうございます!

「ターミナルを落とす」とはどういう意味ですか?
違う言葉で説明してみてください。

1Like

Comments

  1. @yuman211

    Questioner

    すみません、再起動です。
  2. printenv PATH
    これで実際に環境変数PATHにどういう文字列が設定されているかわかるので確認してみると良いと思います。
  3. .zshrcに export PATH= を書いたということなのでしょうから、その直後に printenv PATH を入れてみれば、セットされた内容を確認することができるし、そもそも .zshrc が実行されているかどうかの確認にもなります。
  4. @yuman211

    Questioner

    ダブルクオーテーションで囲ってPATHを通した後、ターミナルを再起動して実行してみました。
    user@USERnoMacBook-puro ~ % printenv PATH
    /usr/local/opt/php@7.4/sbin:/usr/local/opt/php@7.4/bin:~/.composer/vendor/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
    user@USERnoMacBook-puro ~ % laravel -v
    zsh: command not found: laravel
    ありがとうございます!
    ダブルクオーテーションで囲った場合~が展開されてないことに気づきました。
    ~のままではPATHとして認識されないんですかね...
  5. @yuman211

    Questioner

    解決しました。パスについての理解が深まりました!
    コメントありがとうございます!

Your answer might help someone💌