web-dev-qa-db-ja.com

ターミナルとbashの違いは何ですか?

Mac OS Xでターミナルウィンドウを開くと、bashと入力してEnterキーを押すと、次のように表示されます。

Last login: Fri Feb 20 14:30:56 on ttys000
Korays-MacBook-Pro:~ koraytugay$ bash
bash-3.2$ 

たとえば、ターミナルと「bash-3.2 $」の両方でlsまたはls -lなどのコマンドを実行できます

ターミナルで実行されているbashとは何ですか?ターミナル自体とは何ですか?

8
Koray Tugay

Bashは、人気のあるコマンドラインシェルの1つであり、その主な仕事は、他のプログラム(いくつかの補助関数に加えて)を起動することです。
command-lineの部分は、コマンドを1行ずつ入力して制御することを意味します。
正しく言えば、アイコンをダブルクリックしてプログラムを起動するために使用するGUIもシェルですが、実際には「シェル」とは、ほとんどの場合コマンドラインのものを意味します。

すべての最新のコマンドラインシェルは、入力を受け取り、出力を文字の抽象的なストリームとして送信します。これらのストリームの他端は、キーボード、プリンター、ファイル、別のプログラムに接続できます。シェルはほとんど気にしません-文字を読み取り、他のプログラムを実行するように指示するコマンドとして解釈し、 "command not found"などの文字を書き戻します。別のプログラムを実行する場合、デフォルトでは、そのプログラムの入力と出力を同じストリームに接続します。

Terminalは、シェルとユーザー間のグラフィカルインターフェイスを提供するプログラムです。シェルから受け取ります。文字「コマンドが見つかりません」とそれらを表示する方法-フォント、画面上の場所、色、スクロールバーが必要かどうか。いくつかのキーを押すと、それらを文字としてシェルに送信するか(ls -lなど)、または独自に解釈するか(eCなど)がわかります。

ターミナルアプリを開くと、接続先のシェルが自動的に開きます。その設定では、Bashから別のシェルを選択できます。生意気に感じている場合は、シェルではないプログラムを使用することもできます。あまり便利ではありませんが、ターミナルが文字の受け渡しだけを考慮し、シェルが文字を処理する方法を考慮していないことを示しています。 。

(ターミナルを介して)Bashにbashと入力するとどうなりますか?それはプログラムBashを開始します-つまり、それ自体の中のそれ自身の別のコピーです。

ETA:各コマンドを入力する前にBashから表示されるPromptは便利にカスタマイズでき、変数PS1によって(特別な形式を使用して)制御されます。 Bashの親インスタンスと子インスタンスの両方にecho $PS1を入力してみてください。

ターミナルアプリから実行すると、その変数は[マシン名、ディレクトリ、ユーザーを指定してプロンプトを表示する]に設定されます。これは/etc/bashrcで設定されますが、理想的には~/.bash_profileで新しい値を設定できます。 NB。これはOSX固有のものです。他のほとんどのシステムでは、~/.bashrcを使用します。

Bashの子インスタンスを実行するだけでは、/etc/bashrcは再実行されないため、この変数は設定されません。また、子シェルによって継承されるように設定されていない(これは完全に環境変数のことです)ので、Bashは役に立たないデフォルトに戻り、実行中のバージョンを表示するだけです。

9
hemflit

端末が1回literallyとは、入力したボックスがリモートでメインフレームに接続されていることを意味します。

実際、あなたの現代の「ターミナル」はおそらくこれらの1つをエミュレート します

enter image description here

現代の「ターミナル」はターミナルエミュレーターで、標準的なターミナルとほぼ同じように動作します。つまり、 xtermrxvt などを実行しています。端末は、コマンドを入力するためのメカニズムを提供します。

その上にコマンドプロセッサまたはShellを実行します- bashfishcsh またはその他。これは、実際に端末に入力されたテキストを、コンピュータが実行する指示に変換するものです。ほとんどのシェルはスクリプティングを許可しており、bashとcshとでは構文が大きく異なります。それらは異なる端末で同様に実行されます。

9
Journeyman Geek

https://stackoverflow.com/questions/3327013/how-to-determine-the-current-Shell-im-working-on も参照してください。

あなたが試すことができます echo $0またはecho $Shell最初に、ターミナルエミュレーターウィンドウでシェルが実行されているものを確認します。

1
akraf