私はMacを使っていますが、これは一般的にUnixに適用できると思います。
私はシェルスクリプトを学習している最中ですが、足りない部分があります。通常のターミナルでは、for
ループなどのスクリプト構文をコマンドと組み合わせて使用することができます。
しかし、...bash
は、シェルスクリプト用のインタープリターを開きます。
Stdinにスクリプトが渡されたときにスクリプトが機能するという事実が示すように、ターミナルはすでにシェルスクリプトのインタープリターではないため、どちらが混乱するのでしょうか。
おまけの質問:bash
はbash -i
とどのように異なりますか。これはman
によると、「インタラクティブセッションを開始します」.....単独でbash
を入力しただけでは何が起こりますか?私の目には、そもそも通常のターミナルにいるのと何の違いもありません...
端末を起動すると、常にその内部で何らかのプログラムが実行されます。そのプログラムは通常、デフォルトでシェルになります。 OS Xでは、デフォルトのシェルはBashです。つまり、ターミナルを起動すると、その内部でbash
が実行されているターミナルエミュレータウィンドウが表示されます(デフォルト)。
OS Xにはbash
とtcsh
のみが同梱されていますが、必要に応じて デフォルトのシェルを変更 を別の値に変更できます。 the open
command を使用して、新しいターミナルでカスタムコマンドを起動することを選択できます。
open -b com.Apple.terminal somecommand
その場合、シェルは実行されず、カスタムコマンドが終了すると、それで終わりです。
すでにbash
を実行しているターミナル内でbash
を実行すると、1つのシェルが別のシェルを実行していることになります。内部シェルを終了するには Ctrl-D またはexit
をクリックすると、開始したシェルに戻ります。構成の変更をテストしたり、環境を一時的にカスタマイズしたりする場合に役立つことがあります。内部シェルを終了すると、行った変更がそれで去ります。それらは任意に深くネストすることができます。そうしないと、別のスクリプトを起動しても意味がありませんが、bash some-script.sh
のようなコマンドはそのスクリプトだけを実行して終了します。これは多くの場合便利です。
対話型シェルと非対話型シェルの違いは少し微妙であり、ほとんどの場合、ロードされる構成ファイル、存在するエラー動作、エイリアスなどが有効かどうかを扱います。大まかな原則は、対話型シェルはその前に配置したい設定を提供し、非対話型シェルはスタンドアロンスクリプトに必要な設定を提供するということです。すべての違いは Bashリファレンスマニュアル と このサイトの専用の質問 に明示的に文書化されています。
ほとんどの場合、気にする必要はありません。多くの場合、別のシェルを起動する理由はありません。起動すると、特定の目的が頭に浮かび、それをどうするかがわかります。
この写真のマシンは(ビデオ) terminal であり、より具体的には VT1 - Digital Equipment Corporation。
数十年前、コンピューターが大規模だったとき、ユーザーごとにパーソナルコンピューターを用意するのではなく、ケーブル、メインコンピューターに接続された端末、ディスプレイとキーボードを備えたダミーデバイスがあったかもしれません。 VT100はコンピュータではなく、単なるキーボードとディスプレイです。通常、これらのいくつかは1台のコンピューターに接続されていました。
したがって、数十年前、物理的なデバイスである端末を介してUnixコンピュータにアクセスしていました。パーソナルコンピュータが登場し、グラフィカルユーザーインターフェイスが一般的になるにつれ、そのような端末デバイス-端末エミュレータと呼ばれるアプリケーションのように、Unixコマンドラインにアクセスする方法が(そして今でも)ありました。 OS XのTerminalプログラムはターミナルエミュレータです。今日のほとんどのターミナルエミュレータは、非常に同じVT100デバイスを非常に厳密にエミュレートしています。つまり、Terminal
アプリケーションのウィンドウで実行されるプログラムのほとんどは、ビッグで実行する場合とまったく同じように見えます。 70年代のコンピュータとそのような端末装置に表示されたデータ。プログラムにとって、ターミナルエミュレータのeachウィンドウは、これらのデバイスのいずれかのように動作します。ほとんどのコマンドラインプログラムは違いを認識できませんでした(ただし、正規のVT100をMBPに接続するのは難しい場合があります)。
ビデオ端末は、ハードコピー端末と呼ばれるデバイスの後継であり、キーボードとプリンターを備えたデバイスです-プログラムからのすべての出力は、代わりに紙に印刷されます。ビデオ端末がそのようなデバイスに対する大きな改善であったと想像することができます。ハードコピー端末の例、TeleTypeモデル33 ASR:
このデバイスはteletypewriter、teletyper、またはttyとも呼ばれていました。そしてttyは70年代初頭から立ち往生しており、そのようなデバイスやターミナルエミュレーターのインターフェースはttyと呼ばれています、そして多くのプログラミング言語では、端末ウィンドウに表示するテキストを出力することは、まだ「印刷」と呼ばれています。もともとは比喩ではなく事実でした。
シェルは常にそこにありました-Unixの黎明期から、ターミナルにログイン名とパスワードを入力した後に実行され、中央のコンピューターにアクセスするプログラムでした。最初のシェルプログラムは、1971年の Thompson Shell (sh
)で、1977年に Bourne Shell に置き換えられました。これはsh
とも呼ばれます。初期の段階では、これは簡単に更新できる別のプログラムであり、ユーザーがデフォルトのシェルの代わりに独自のプログラムを実行できるように設計されていました。
GNUプロジェクトは、bash
と呼ばれる改良されたシェルを最初から作成しました Bourne-again Shell の短縮形で、Appleが同梱することにしましたMacOS Xも。
1970年代に、その区別は明確でした。ターミナルは、クリーム色のプラスチックケースに30 kgの固い鋳鉄製のフレームをガラスのディスプレイとキーボードを正面にして、またはキーボードだけを備えたデバイスに包んだようなものでした。一方、シェルはメインコンピュータで実行されるプログラムであり、コマンドを解釈します。
そもそも、ターミナルがbash
(または別のシェルインタープリター)を実行していません。
端末、より正確にはあなたの場合の端末エミュレータは、キーストロークを基礎となるプログラムに渡し、それに送られた文字を表示する単なるデバイスです。デフォルトではシェルを実行しますが、テキストエディターなどの別のテキストアプリケーションを実行している端末を起動することを禁止するものはありません。
すでにインタラクティブセッションにいる場合、bash
およびbash -i
を実行しても実際には違いはありません。