bash、sh、シェルスクリプト、shell、Linuxコマンドの違いが分からないのですが
・shellはLinuxコマンドの一部?
・bashとshは兄弟みたいな関係でshellの一部?
・シェルスクリプトは、bashやshの組み合わせ?
・下記のような階層でしょうか?
Linuxコマンド
┗shell
┣bash
┗sh
・cpコマンドは、bashで使用できて、shでも使用できて、shellであって、Linuxコマンドでもある、ということですか?
・cpコマンド1つだけでは、シェルスクリプトとは言わない? あるいはバッチ処理として動かせばそれはもうシェルスクリプト?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
ベストアンサー
よろしければ過去の質問に私が答えた回答もご覧ください。
bashを使っているのにecho 'PATH="/usr/local/heroku/bin:$PATH"' >> ~/.zshrcでパスを通せた理由がわかりません - teratail
cp や ls なんかも Linux のコマンドです。これをファイルシステムから読み込んでプロセスを生成して、というのを直接やるのは大変なので、シェルを使うわけです。ユーザがコマンドを入力すると、シェルが何か処理して表示する、というのは、対話的シェルとか対話モードのシェルと言います。
これに対し、あれをやってこれをやって、というのをあらかじめファイルに用意しておき、それを実行することもできます。この台本 (= script) となるファイルがスクリプトファイルです。スクリプトファイルを実行するのが python インタプリタなら pyhton スクリプトであるように、シェルで実行するスクリプトなのでシェルスクリプト、と言います。
ですので、シェルスクリプトは(通常)ファイルの形状をしています。cp /dev/null /tmp/test.txt
一行だけだとしても、ファイルに記述してあり、これをシェルで実行するならシェルスクリプトです。他方、対話シェルでも
[takeyuki@jupiter ~]$ while sleep 1 > do echo . > done
とかやると、制御構造も書けるし複数行入力もできますが、これはシェルスクリプトとは呼ばないと思います(while を書くと、do ~ done までのブロックを書き終えるまで入力を促される。>
はそのときシェルから出力されるプロンプト)。
追記
sharow さんの回答のところにコメントでちょっと書きましたが、シェルはドラえもんと考えるといいかもです。
ドラえもんって便利ですけど、本当に便利なのは四次元ポケットの中(ファイルシステム)にあるさまざまな道具(Linux コマンド)なんですよね。でも、四次元ポケットから適切な道具を取り出すのは素人には困難なので、ドラえもん(bsh)を使うわけです。ドラミちゃん (zsh) の方が高機能でユーザフレンドリーで道具(Linux コマンド) に頼らずに自分自身でできちゃうこと(組み込みコマンド)も多くて、柔軟に対応してくれるんですね。ドラえもんやドラミちゃんも実は道具(Linux コマンド)なので、ドラえもん (bsh) に対して「ドラミちゃん (zsh) を呼び出して」と頼んで、以降、ドラミちゃんにいろいろお願いすることも可能です。
ドラえもんと向かい合っているときに「あれやって」「こういう道具出して」と対話的にお願いすることもできます(対話モード)し、手紙にやってほしいことを書いて(シェルスクリプト)、「これよろしく!」と頼むこともできます。
投稿2016/04/24 12:06
編集2016/04/24 20:52総合スコア2468
0
シェル(bash/sh/...)を中心にして他を捉えたほうが分かりやすいんじゃないでしょうか。
シェルから使うコマンドは組み込みコマンドとその他のコマンドに分けられます。私の環境のbashではexitコマンドなどはシェルの組み込みコマンド(built-in command)です。zshだとechoまでも組み込みコマンドになっていますが、何が組み込みであるかはシェルの種類によって異なります。もし/usr/binなどにあるコマンドを(組み込みでないから)Linuxコマンドと呼ぶのなら、組み込みコマンド以外はLinuxコマンド、と言うことができます。これは$PATHがちゃんと設定されていればwhich command-name
というコマンドで調べられます。例えばシェルスクリプトのifなどで使われる[
は意外にもLinuxコマンドです(/usr/bin/[という実行ファイルがあります)。
なお、ifやforは組み込みコマンドではなくシェルの予約語という扱いのようです。
投稿2016/04/24 12:24
総合スコア1149
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/24 13:24
2016/04/24 20:53 編集
2016/04/25 02:14
2016/04/28 12:04
0
数学の集合の言葉を使うと、
シェル(注1)はLinuxコマンドの部分集合。bash sh はシェルの要素(当然、Linuxコマンドの要素でもある)。
cpコマンドはLinuxコマンドの要素だが、シェルの要素ではない。
シェルスクリプトは、シェルが読み込んで実行するファイルのこと。ファイルの中には、シェルの組み込みコマンドや、Linuxコマンドが書いてある。
注1:シェル(shell)とは殻という意味の一般の英単語なので、当然ここで述べている以外の意味もあります。
投稿2016/04/24 11:15
総合スコア84380
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/24 12:31
2016/04/24 13:28 編集
2016/04/28 11:51
0
シェルスクリプトはシェルにまとめて指示を与えるテキストファイルです。
だいぶ混乱されているようですが、まあ実際のところ(極端なことを言えば)
どれも同じような「実行ファイル」ですからねえ。しょうがないかも。
とりあえず【なにか】がやりたいから質問してるんですよね?
次回からは、そのへんをまとめてみたらどうでしょうか。
投稿2016/04/24 11:42
総合スコア7458
0
・shellはLinuxコマンドの一部?
shell(bashとかsh)はLinuxコマンドの一部です。
・bashとshは兄弟みたいな関係でshellの一部?
shellの一部というわけではなくてshellのいくつかの種類のうちの一つです。
・シェルスクリプトは、bashやshの組み合わせ?
シェルスクリプトは、bashやshの組み合わせではなく、コマンドやshell の組み込みコマンドの組み合わせです。
・下記のような階層でしょうか?
Linuxコマンド
┗shell
┣bash
┗sh
shell はLinuxコマンドの中の一つです。
bash、sh は shell のいくつかの種類の中の一つです。
同じ、配下にあっても少し意味合いが違うような気もします。
・cpコマンドは、bashで使用できて、shでも使用できて、shellであって、Linuxコマンドでもある、ということですか?
cpコマンドはLinuxコマンドです。shellではありません。
cpに限らず一般的にコマンドはshell(bashでもshでも)で使えます。
・cpコマンド1つだけでは、シェルスクリプトとは言わない? あるいはバッチ処理として動かせばそれはもうシェルスクリプト?
別にコマンド一つでもシェルスクリプトです。
バッチ処理(バックグランドという意味で)とか動かし方は関係ありません。
投稿2016/04/24 11:11
総合スコア674
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/24 12:23 編集
2016/04/24 13:19
2016/04/28 11:49
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/24 12:40 編集
2016/04/24 21:07
2016/04/28 11:56 編集