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

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

新規登録して質問してみよう
ただいま回答率
85.50%
bash

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

Heroku

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

Linux

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

シェル

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

zsh

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

Q&A

解決済

3回答

3124閲覧

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

begginer

総合スコア10

bash

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

Heroku

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

Linux

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

シェル

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

zsh

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

0グッド

0クリップ

投稿2016/03/30 22:25

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

###発生している問題・エラーメッセージ
bashでパスを通すには、/.bash_profileにパスを記述する必要があるということですが、/.zshrcにパスを通していると思われる以下のコマンドを実行後、herokuコマンドが使えるようになっていました。

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

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

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

bash

1echo $0 2bash

bash

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

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

###参考にさせていただいたリンク等
PATHを通すとは? (Mac OS X)
[vagrant 1.5] Vagrant 上の CentOS 6.5 から Heroku を使うには。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

~/.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/30 23:33

編集2016/03/31 00:34
unau

総合スコア2468

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unau

2016/03/31 00:34

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

2016/03/31 03:35

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

0

めっちゃ簡潔に書くと

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

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

【余談】

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

投稿2016/03/31 00:15

編集2016/03/31 00:17
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

begginer

2016/03/31 03:21

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

0

ベストアンサー

はじめまして、
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/30 23:48

ShinyaAnan

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

begginer

2016/03/31 03:32

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問