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

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

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

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

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Q&A

解決済

1回答

1028閲覧

sh sample.shと./sample.shの実行の違い

退会済みユーザー

退会済みユーザー

総合スコア0

bash

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

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

0グッド

0クリップ

投稿2019/02/17 15:07

お世話になります。
mac内のbashでシェルスクリプトを勉強しています。

sample.shというシェルスクファイルがあるとして、

#! /bin/bash echo hello

$ sh sample.shとchmodで実行権限を付与した際の$ ./sample.shは何か違いは有るのでしょうか?
後者で実行されることが多いのですが、結果は同じで、権限付与する手間を考えると前者のほうが手軽なのになぜかなと思いました。
初歩的な質問で申し訳ありませんが、ご教授のほどよろしくお願いいたします。

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

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

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

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

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

wwbQzhMkhhgEmhU

2019/02/17 18:58

昔は慣習的に実行可能ファイルには基本実行可能ビットを立てて、/usr/bin,/usr/local/bin,..,$HOME/binなどパスの通った場所に入れていたからだと思います。今のように拡張子を付ける習慣もそれほどなかった気がしますし、バイナリファイルなのか、ただのスクリプトなのかも見てみないと分からない、という感じでした。 こうすることのメリットはご存知のとおり、カレントディレクトリがどこであっても、そのコマンドが使える、ということです。 $ sample.sh 昔は(今もやる人はやると思いますが)、$HOME/binに自分用のスクリプトやバイナリをたくさん抱えて、そこにパスを通して作業する人が多かったのです。 こういう使い方をするのが一般的だったので、例えばまだ開発中のスクリプトなどは、開発用のディレクトリに置いて、その場で $ ./sample.sh のような使い方をしていました。これの名残りだと思います。実行可能ファイルに実行可能ビットが立つメリットはあるのですが、このような形で環境を構築すると、その人の環境でしか使えないスクリプト/プログラムがどんどん出来てしまう(もちろん適当に作るのでですが)ため、実行可能プログラムがパッケージ管理主体となっている現在では、あまりやられていない気がします。 長くなってすみませんが、ようは現状どちらかに明らかなメリットがあるわけではないです。用途によって使い分けることもできますが、好きな方でいいと思いますよ。
Stan_Dma

2019/02/17 23:31

'./foo.sh' should usually pick up a file in the current directory, while 'sh foo.sh' might execute a file to be found first in your directory order in PATH.
guest

回答1

0

ベストアンサー

前者は、shというコマンドを起動して、そのパラメーターにファイル名を与えます。shはパラメーターのファイル名をシェルスクリプトとみなして、それを実行します。

後者は、ファイルの1行目の/bin/bashを見てそのコマンドをそのファイル名をパラメータとして起動して、それ以降は同じです。

後者のメリットは、そのファイルを例えば~/binディレクトリに入れると、sample.shと起動できることです(普通は、PATH$HOME/binが入っているので)。
よく使う処理を自分でコマンドにしてbinに入れておくと標準のコマンドのように起動できます。

いろんなケースで使うわけでなく、そのディレクトリにいるときだけしか実行しないファイルであれば前者の方法で十分だと思います。

投稿2019/02/18 03:05

otn

総合スコア84555

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

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

退会済みユーザー

退会済みユーザー

2019/02/19 12:25

「質問への追記・修正、ベストアンサー選択の依頼」にコメントいただいた方含め、よくわかりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問