私はMacを使用していますが、これは通常Unixにも当てはまると思います。
シェルスクリプトを学んでいますが、何か抜けているようです。通常の端末にいるときにfor
操作を実行するには、コマンドと組み合わせたループなどのスクリプト構文を使用できます。
しかし...bash
シェルスクリプトを実行するためにインタプリタを開きます。
端末がすでにシェルスクリプトへのインタプリタではないので、これは私が混乱している部分です。 stdinに入力すると、スクリプトが機能するという事実からわかるように?
ボーナス質問:「会話型セッションの開始」によるとbash
どう違いますか?自分で入力するとこれは起こりませんか?私の考えでは、そもそも一般ターミナルにあるのとあまり変わらないようです…bash -i
man
bash
答え1
この写真の中の機械は(ビデオ)端末、より具体的にVT100渡すデジタル機器工事。
数十年前、コンピュータが大きかったときは、各ユーザーにパーソナルコンピュータを置く代わりに、ケーブルでメインコンピュータに接続されたディスプレイとキーボードを備えた仮想デバイスである端末を持つことができました。 VT100はコンピュータではなく、キーボードとモニタです。通常、コンピュータにはこれらのデバイスが複数接続されています。
だから数十年前だけでもUNIXコンピュータはターミナル(物理的デバイス)を通じてアクセスした。パーソナルコンピュータの出現により、グラフィカルユーザーインターフェースが普遍化され、このようなターミナルデバイスを介してUnixコマンドラインにアクセスする方法がありました。端末エミュレータ。これ端末OSのプログラムTerminal
ランタイムはまったく同じように見え、データはこのように端末デバイスに表示されます。プログラムの場合、各端末エミュレータのウィンドウは、これらのデバイスのいずれかのように動作します。ほとんどのコマンドラインプログラムは違いを認識しません(本物のVT100をMBPに接続するのは難しいかもしれません)。
ビデオ端末は、キーボードとプリンタを備えたハードコピー端末と呼ばれるデバイスの後続製品です。プログラムのすべての出力は紙に印刷されます。ビデオ端末がこれらのデバイスに比べて大幅に改善されたと想像することができます。ハードコピー端末の例、TeleType Model 33 ASR:
この装置は次のように知られている。テレタイププライター、テレタイププライターまたは端末略語と端末1970年代初頭から、これらのデバイスへのインターフェイスまたはターミナルエミュレータはまだ呼び出されています。端末そして、多くのプログラミング言語で端末ウィンドウに表示するテキストを出力することを依然として「印刷」といいます。もともとこれはたとえ話ではありません。
シェルは常に周りにいました。 Unixの初期から中央コンピュータにアクセスするために、ログイン名とパスワードを端末に入力して実行するプログラムです。最初のシェルプログラムはトンプソンシェル( sh
) 1971年からボンシェル、また〜として知られているsh
。最初の設計意図は簡単に更新できる別のプログラムであり、ユーザーがデフォルトのシェルの代わりに自分のプログラムを実行できるようにすることでした。
その後、GNUプロジェクトは最初から改良されたシェルを作成しましたbash
。ボンアイデンティティシェル、AppleはMacOS Xと一緒に提供することにしました。
1970年代にはその違いが明らかでした。ターミナルは、クリーム色のプラスチックケースで梱包された30kgの頑丈な鋳鉄フレームのように見え、その前にガラスディスプレイとキーボードがあったり、キーボードもあった。 -専用デバイスとプリンタ。一方、シェルはホストコンピュータ上で実行され、コマンドを解釈するプログラムです。
答え2
端末を起動すると、常に一部のプログラムが実行されています。このプログラムは通常シェルをデフォルトとして使用します。 OS Xでは、デフォルトのシェルはBashです。この意味を合わせるとbash
端末を実行すると、端末エミュレータウィンドウが実行されていることがわかります。(基本的に)。
あなたはできますデフォルトシェルの変更bash
必要に応じて他のものに変更することができますが、OS Xのとtcsh
。新しい端末でカスタムコマンドを実行することを選択できますopen
コマンド:
open -b com.apple.terminal somecommand
この場合、シェルいいえここで実行し、カスタムコマンドが終了したら終了です。
bash
すでに実行中の端末で実行すると、bash
次の結果が表示されます。あるシェルが別のシェルを実行しています。Ctrl-D内部シェルを使用または終了でき、exit
起動したシェルに戻ります。これは、設定変更をテストしたり、環境を一時的にカスタマイズしたい場合に便利です。変更は内部シェルを終了するときに便利です。消えるようにしてください。好きなだけ深くネストできます。そうしないと、他のスクリプトを起動する必要はありませんが、このようなコマンドはbash some-script.sh
スクリプトを実行して終了するため、しばしば便利です。
対話型シェルと非対話型シェルの違いはわずかに微妙であり、主にロードされる構成ファイル、存在する誤った動作、エイリアス、および同様の動作を有効にするかどうかに関するものです。おおよその経験則は、対話型シェルが必要な設定を提供し、非対話型シェルがスタンドアロンスクリプトに必要な設定を提供することです。すべての違いは次に明確に文書化されています。バッシュリファレンスマニュアル、そしてまたこのサイトには専用の質問があります。
ほとんどの場合、気にする必要はありません。通常、他のシェルを起動する理由はなく、そうするときに特定の目的を念頭に置いて何をすべきかを知っています。
答え3
bash
まず、ターミナル(または他のシェルインタプリタ)がすでに実行されているという事実を見逃しました。
あなたの場合、端末(より正確には端末エミュレータ)は、メインプログラムにキーストロークを渡し、送信されたすべての文字を表示するためのデバイスです。デフォルトでは、シェルを実行しますが、テキストエディタや他のアプリケーションなどの他のテキストアプリケーションを実行する端末を起動することを禁止するものはありません。
すでにインタラクティブセッションに参加している場合、ランニングは実際に違いをもたらしませんbash
。bash -i