質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • Linux

    3889questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Heroku

    903questions

    HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

  • bash

    667questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

  • シェル

    250questions

    シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

  • zsh

    87questions

    zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。

bashを使っているのにecho 'PATH="/usr/local/heroku/bin:$PATH"' >> ~/.zshrcでパスを通せた理由がわかりません

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 873

begginer

score 2

前提・実現したいこと

mac上にvagrantを使って、CentOS6.7のローカル開発環境で作業をしています。
heroku toolbeltをインストールする際、「パスを通す」必要があり、そこで不明点が生じたためご教授いただけたら幸いです。
なお、linuxやシェルに関しては初心者のため、平易にご回答いただけるとありがたいです。

発生している問題・エラーメッセージ

bashでパスを通すには、/.bash_profileにパスを記述する必要があるということですが、/.zshrcにパスを通していると思われる以下のコマンドを実行後、herokuコマンドが使えるようになっていました。

CentOSではbashが使われているということですが、念のため確認したところ、やはりbashを使っているようです。

なぜこれでパスが通ったのか理由がわかりません。

解決のために実行した内容

echo $0
bash
echo 'PATH="/usr/local/heroku/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

補足情報(言語/FW/ツール等のバージョンなど)

CentOS6.7
bash

参考にさせていただいたリンク等

PATHを通すとは? (Mac OS X)
[vagrant 1.5] Vagrant 上の CentOS 6.5 から Heroku を使うには。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+2

~/.bashrc や ~/.zshrc などは、bash や zsh の起動時に自動的に読み込まれ、実行されるスクリプトです。一方で、bash における source は、今現在使っている bash の中で外部ファイルに書かれたスクリプトを読み込んで実行します。したがって、どのファイルにパスを通す設定が書いてあったとしても source で指定して実行すれば、現在使っている bash でその設定が有効になります。
違いが出てくるのは、次回ログインしたとき、など、別の bash が起動したときです。もし、~/.bashrc
 に記述していない場合は、次回起動したときには再度パスを設定しなおす必要があります。~/.zshrc にパスを通す設定を書いた、ということは、zsh のほうでは次回 zsh を起動したときには、パスが通っている、ということになります。


シェルについて補足します(一部は別の質問への私の回答を抜粋)。

bash は、いわゆるシェル(shell : 殻)の一種であり、カーネル (kernel : 核) が提供するさまざまなサービス(プロセスとかファイルシステムとかネットワークとか)を利用するための窓口です。「核」を直接いじるのはめんどいので、使いやすいインタフェースとして「殻」があるわけです。

シェルは、単なる「殻」、あくまでも使いやすくするためのインタフェースなので、代替がいろいろあります。Linux などでは bash が標準でしょうが、sh, bsh しか入っていない Unix系 OS もあります。システムの内部で使うだけでなく、人間が使うのに便利なように開発されたシェルも古くは csh, tcsh とかありましたが、zsh なんかも人気があるんですかね(古い人間なのでよく知りません)。 

CentOS だとデフォルト bash ですが、他のシェルを選ぶこともできます。zsh が使いたければ zsh をインストールし、任意のシェルから起動することもできますし、特定のユーザがログインしたときに使われるログインシェルは /etc/passwd で設定します。

$ grep $USER /etc/passwd


とかやると、自分の使うログインシェルが確認できます。
また、そのシステム内で使えるシェルの一覧は /etc/shells に記述されています。

$ cat /etc/shells


してみてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/31 09:34

    シェルについて補足しました。

    キャンセル

  • 2016/03/31 12:35

    ご回答ありがとうございます。
    シェルについての補足部分も、初心者の自分にとっては大変わかり易く勉強させていただきました。

    キャンセル

checkベストアンサー

+1

はじめまして、
source ~/.zshrc
を実行されているのであれば、現在のbashの環境変数に、
~/.zshrc に記述されている PATH="/usr/local/heroku/bin:$PATH"
が設定されますので、それ以降、/usr/local/heroku/bin/ に
パスが通ります。

ここでは、たまたま、.zshrc というファイル名なので、zshでなく bash
なのにどうして?という疑問が出ていると思います。

ファイル名が ~/hoge であっても、中に PATH="/usr/local/hoge/bin:$PATH" と書いておき、
source ~/hoge を実行すると、 /usr/local/hoge/bin にパスが通ります。

以下のサイトの中で、 source を検索すると、かなり下の方に
「シェルの組み込みコマンド」の source の説明が書いています。
リンク内容

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/31 12:32

    ご回答ありがとうございます。
    bashでは、source ~/.hoge(任意のファイル名)というコマンドで、任意のファイルに書かれた内容が実行されること、
    そして今回はそのファイル名がたまたま.zshrcという名前だった、ということがわかりました。
    「zshでなく bash なのにどうして?」という疑問に一番わかりやすく回答いただいたため、ベストアンサーとさせていただきます。
    ありがとうございました。

    キャンセル

+1

めっちゃ簡潔に書くと

  • sourceコマンドを使えば任意のファイルを読み込める.但しシェル再起動時には環境変数はリセットされてしまう.
  • ~/.zshrcはzsh起動時に自動で読み込まれるファイル.シェル再起動時には環境変数はリセットされるが,毎回読み込まれるので恒久的に内容が反映される.
  • ~/.bashrcはbash起動時に自動で読み込まれるファイル.シェル再起動時には環境変数はリセットされるが,毎回読み込まれるので恒久的に内容が反映される.

ということです.source ~/.zshrc~/.zshrcを編集したあとに読み込む感じで何かの導入チュートリアルなどに書かれていることがあるのは,シェルを再起動せずともすぐ新しい環境変数を使えるようにするためです.もし再起動するならsourceは実行しなくていいです.
 

【余談】

zshとbashの両方で読み込みたい内容は~/.sharedrcのようなファイルに分離しておき,~/.zshrc~/.bashrcの両者でそれぞれsource ~/.sharedrcと書いておくといいです.

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/31 12:21

    ご回答ありがとうございます。
    余談部分のsourceコマンドの使い方も、とても勉強になりました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Linux

    3889questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Heroku

    903questions

    HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

  • bash

    667questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

  • シェル

    250questions

    シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

  • zsh

    87questions

    zshは、UNIX系OSのシェルの1つです。 cshやksn系のコマンドライン編集機能も実装されたシェルです。

  • トップ
  • Linuxに関する質問
  • bashを使っているのにecho 'PATH="/usr/local/heroku/bin:$PATH"' >> ~/.zshrcでパスを通せた理由がわかりません