Cシェル

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

Cシェル
TcshejecutándoseenescritorioMacOSX.png
MacOSXデスクトップでtcshとshを並べて表示
原作者ビル・ジョイ
初回リリース1978 ; 44年前 (1978)
安定リリース
6.20.00/2016年11月24日; 5年前[1] (2016-11-24)
リポジトリ
で書かれているC
オペレーティング・システムBSDUNIXLinuxmacOS
タイプUnixシェル
ライセンスBSDライセンス
UNIX用のWindowsサービスで実行されているCシェル

Cシェルcshまたは改良版tcsh)は、1970年代後半にカリフォルニア大学バークレー校の大学院生だったBillJoyによって作成されたUnixシェルです。Joyが1978年に最初に配布したBerkeleySoftwareDistribution (BSD)の2BSDリリースを皮切りに、広く配布されています。 [2] [3]アイデアやコードに対する他の初期の貢献者は、Michael Ubell、Eric Allman、 MikeOでした。 'ブライエンとジムクルプ。[4]

Cシェルは、通常はテキストウィンドウで実行されるコマンドプロセッサであり、ユーザーがコマンドを入力して実行できるようにします。Cシェルは、スクリプトと呼ばれるファイルからコマンドを読み取ることもできますすべてのUnixシェルと同様に、ファイル名のワイルドカードパイピングヒアドキュメントコマンド置換条件テスト反復のための変数制御構造をサポートします。特に1980年代にCシェルを他のシェルと差別化したのは、そのインタラクティブな機能と全体的なスタイルでした。その新機能により、使いやすく、速くなりました。言語の全体的なスタイルはより似ていましたCとより読みやすいように見られました。

macOSRedHatLinuxなどの多くのシステムでは、cshは実際にはtcshであり、cshの改良版です。多くの場合、2つのファイルの1つは、他のファイルへのハードリンクまたはシンボリックリンクのいずれかであるため、どちらの名前もCシェルの同じ改良バージョンを参照します。

Debianと一部の派生物(Ubuntuを含む)には、cshとtcshの2つの異なるパッケージがあります。前者は元のBSDバージョンのcsh [5] [6]に基づいており、後者は改良されたtcshです。[7] [8]

tcshは、「t」のソースであるTenexシステムから借用したファイル名とコマンド補完およびコマンドライン編集の概念を追加しました。[9]機能を追加するだけで、そこにあるものは変更されなかったため、tcshは元のCシェルとの下位互換性を維持しました[10] 。Joyが作成した元のソースツリーからのサイドブランチとして開始されましたが、tcshは現在進行中の開発のメインブランチです。tcshは非常に安定していますが、新しいリリースはほぼ1年に1回表示され続け、主にマイナーなバグ修正で構成されています。[11]

設計の目的と機能

Cシェルの主な設計目標は、 Cプログラミング言語のように見えることと、インタラクティブな使用に適していることです。

Cのように

UnixシステムはほぼCでのみ記述されていたため、Cシェルの最初の目的は、システムの他の部分とよりスタイル的に一貫したコマンド言語でした。キーワード、括弧の使用、Cシェルの組み込み式の文法、および配列のサポートはすべて、Cの影響を強く受けました。

今日の標準では、Cシェルは他の多くの一般的なスクリプト言語よりも特にCに似ているようには見えないかもしれません。しかし、80年代から90年代にかけて、特にベル研究所スティーブン・ボーンが書いた当時の支配的なシェルであるボーンシェル( shとも呼ばれる)と比較した場合、その違いは目を見張るものがありました。この例は、Cシェルのより一般的な式の演算子構文を示しています。

ボーンシェル

#!/ bin / sh 
if  [  $ days -gt 365  ]
 thenechoこれは1年以上です

   fi

Cシェル

#!/ bin / csh 
if   $ days > 365  thenecho
これは1年以上です
endif   

ボーンshには表現文法がありませんでした。四角い括弧で囲まれた状態は、外部テストプログラムを実行するためのより遅い手段で評価する必要がありました。shのコマンドは、子プロセスifとして実行される新しいコマンドとして引数ワードを取りました子がゼロの戻りコードで終了した場合、shはthen句(別のステートメントですが、多くの場合、セミコロンで同じ行に結合されて記述されます)を探し、そのネストされたブロックを実行します。それ以外の場合は、elseを実行します。テストプログラムを「」と「」の両方としてハードリンクするtest[「角括弧の表記上の利点と、テストの機能がsh言語の一部であるように見えます。shが制御ブロックの終わりをマークするために逆キーワードを使用したのは、ALGOL68から借用したスタイルでした。[12]

対照的に、cshは式を直接評価できるため、式が高速になりました。また、読みやすさも向上していると主張しました。その表現は、ほとんどがCからコピーされた文法と一連の演算子を使用し、キーワードは逆にならず、全体的なスタイルもCに似ていました。

これは2番目の例で、2の最初の10乗を計算するスクリプトを比較しています。

ボーンシェル

#!/ bin / sh 
i = 2 
j = 1 
while  [  $ j -le 10  ] 
do 
   echo  '2 **'  $ j  =  $ i 
   i = ` expr $ i  '*'  2` j = ` expr
    $ j + 1`完了_

Cシェル

#!/ bin / csh 
set i  = 2
 set j  = 1
 while   $ j < = 10 
   echo  '2 **'  $ j  =  $ i 
   @ i * = 2
   @ j ++
終わり

ここでも、式の文法がないため、shスクリプトはコマンド置換exprコマンドを使用します。(最新のPOSIXシェル には、そのような文法があります。ステートメントは、次のように記述できますi=$((i * 2)): "$((i *= 2))"

最後に、3番目の例を示します。これは、 switchステートメントのさまざまなスタイルを示しています

ボーンシェル

#!/ bin / sh 
for i ind *
ケース$ iin 
      d 
   echo $iは短いです;; 
      * echo $iは長いです;; esac完了      
   

Cシェル

#!/ bin / csh 
foreach i  d * 
   switch   $ i  
      case d ?:
          echo  $ iは短い
         breaksw
      デフォルトecho  $ iは長い
   endswend

shスクリプトでは、「;;」は各ケースの終わりを示します。これは、shがnullステートメントを許可しないためです。

インタラクティブ使用の改善

2番目の目的は、Cシェルがインタラクティブな使用に適していることでした。ターミナルでコマンドを入力することで、より簡単に、より速く、より使いやすくする多くの新機能が導入されました。ユーザーははるかに少ないキーストロークで物事を成し遂げることができ、それはより速く実行されました。これらの新機能の中で最も重要なものは、履歴と編集のメカニズム、エイリアス、ディレクトリスタック、チルダ表記、cdpath、ジョブ制御、およびパスハッシュでした。これらの新機能は非常に人気があり、それ以降、それらの多くは他のUnixシェルによってコピーされています。

歴史

履歴を使用すると、ユーザーは数回のクイックキーストロークを入力するだけで、以前のコマンドを呼び出して再実行できます。たとえば、コマンドとして2つの感嘆符( " !!")[13]を入力すると、直前のコマンドが実行されます。他の短いキーストロークの組み合わせ、たとえば「!$」(「前のコマンドの最後の引数」を意味する)を使用すると、前のコマンドの一部を貼り付けて編集し、新しいコマンドを形成できます。

編集演算子

編集は、前のコマンドのテキストだけでなく、変数の置換でも実行できます。演算子は、単純な文字列検索/置換から、特定のセグメントを抽出するためのパス名の解析まで多岐にわたります。

エイリアス

エイリアスを使用すると、ユーザーはエイリアスの名前を入力し、Cシェルでユーザーが定義した単語のセットに内部的に展開することができます。多くの単純な状況では、エイリアスはスクリプトよりも高速で便利です。

ディレクトリスタック

ディレクトリスタックを使用すると、ユーザー現在の作業ディレクトリをプッシュまたはポップできるため、ファイルシステム内のさまざまな場所を簡単に行き来できます。

チルダ表記

チルダ表記は、「 」文字 を使用してホームディレクトリに相対的なパス名を指定する簡単な方法を提供します。~

ファイル名の補完

エスケープキーをインタラクティブに使用して、現在のコマンドラインの最後にファイル名の可能な補完を表示できます

Cdpath

Cdpathは、検索パスの概念をcd(ディレクトリの変更)コマンドに拡張します。指定されたディレクトリが現在のディレクトリにない場合、cshはcdpathディレクトリでそれを見つけようとします。

ジョブコントロール

1980年代に入ると、ほとんどのユーザーは、複数のウィンドウを排除する単純な文字モード端末しか持っていなかったため、一度に1つのタスクしか実行できませんでした。Cシェルのジョブ制御により、ユーザーは、と入力して、現在のアクティビティを一時停止し、ジョブと呼ばれるCシェルの新しいインスタンスを作成できました^Zその後、ユーザーはコマンドを使用してジョブを切り替えることができますfgアクティブな仕事は最前線にあると言われていました。他のジョブは、一時停止(停止)またはバックグラウンドで実行されていると言われていました。

パスハッシュ

パスハッシュは、Cシェルによる実行可能ファイルの検索を高速化します。Cシェルは、各パスディレクトリでファイルシステム呼び出しを一度に1つずつ実行するのではなく、ファイルが見つかるか可能性がなくなるまで、パスディレクトリをスキャンして作成された内部ハッシュテーブルを参照します。そのテーブルは通常、検索せずにファイルの場所(存在する場合)をCシェルに伝えることができ、rehashコマンドで更新できます。

言語の概要

Cシェルは一度に1行ずつ動作します。各行は、スペースまたは特別な意味を持つ他の文字(括弧、パイピング、入出力リダイレクト演算子、セミコロン、アンパサンドなど)で区切られた単語のセットに トークン化されます。

基本的なステートメント

基本的なステートメントは、単にコマンドを実行するステートメントです。最初の単語は、実行するコマンドの名前と見なされ、内部コマンド、たとえば、echoまたは外部コマンドのいずれかです。残りの単語は、コマンドの引数として渡されます。

基本的なステートメントレベルでは、文法の機能の一部を次に示します。

ワイルドカード

Cシェルは、すべてのUnixシェルと同様に、ワイルドカード文字を含むコマンドライン引数をパターンとして扱い、一致するすべてのファイル名のリストに置き換えます(globbingを参照)。

  • *任意の数の文字に一致します。
  • ?任意の1文字に一致します。
  • [...]角括弧内の文字のいずれかに一致します。ハイフンを使用して範囲を指定できます。
  • [^...セットにない]任意の文字に一致します

Cシェルは、他のUnixシェルによってコピーされたため、 いくつかの表記上の便利さ(拡張グロブとも呼ばれる)も導入しました。

  • abc{def,ghi}交替(別名ブレース拡張)であり、abcdefabcghiに拡張 ます
  • ~現在のユーザーのホームディレクトリを意味します。
  • ~userユーザーのホームディレクトリを意味します。

""などの複数のディレクトリレベルのワイルドカード*/*.cがサポートされています。

バージョン6.17.01以降、このオプションでは再帰的なワイルドカード化àlazsh (例:" **/*.c"または" ***/*.html")もサポートされていglobstarます。

ワイルドカードを解釈する責任をシェルに与えることは、Unixでの重要な決定でした。これは、ワイルドカードがすべてのコマンドで、常に同じように機能することを意味しました。ただし、この決定は、cshがコマンドの実行に使用するexecシステムコールを介して長い引数リストを効率的に渡すUnixの機能に依存していました。対照的に、Windowsでは、ワイルドカードの解釈は通常、各アプリケーションによって実行されます。これはMS-DOSの遺産であり、128バイトのコマンドラインのみをアプリケーションに渡すことができるため、DOSコマンドプロンプトによるワイルドカードは実用的ではありません。最新のWindowsは、最大約32KのUnicodeのコマンドラインを渡すことができますが文字の場合、ワイルドカードの解釈の負担はアプリケーションにあります。

I/Oリダイレクト

デフォルトでは、cshがコマンドを実行すると、コマンドはstdinstdout、およびstderrのcshのstdioファイルハンドルを継承します。これらは通常、Cシェルが実行されているコンソールウィンドウを指します。I / Oリダイレクト演算子を使用すると、コマンドで入力または出力の代わりにファイルを使用できます。

  • > fileは、stdoutがファイルに書き込まれ、存在する場合は上書きし、存在しない場合は作成することを意味します。エラーはまだシェルウィンドウに発生します。
  • >& fileは、stdoutとstderrの両方がファイルに書き込まれ、存在する場合は上書きし、存在しない場合は作成することを意味します。
  • >> fileは、stdoutがファイルの最後に追加されることを意味します。
  • >>& fileは、stdoutとstderrの両方がファイルの最後に追加されることを意味します。
  • < fileは、stdinがファイルから読み取られることを意味します。
  • << 文字列ヒアドキュメントです。Stdinは、文字列に一致する行まで次の行を読み取ります

参加

コマンドは同じ行で結合できます。

  • ;最初のコマンドを実行してから次のコマンドを実行することを意味します。
  • &&は、最初のコマンドを実行し、それが0の戻りコードで成功した場合は、次のコマンドを実行することを意味します
  • ||は、最初のコマンドを実行し、ゼロ以外の戻りコードで失敗した場合は、次のコマンドを実行することを意味します。

配管

コマンドはパイプを使用して接続できます。これにより、あるコマンドの出力が次のコマンドの入力に送られます。両方のコマンドが同時に実行されます。

  • |stdoutを次のコマンドのstdinに接続することを意味します。エラーはまだシェルウィンドウに発生します。
  • |&stdoutとstderrの両方を次のコマンドのstdinに接続することを意味します。

同時に実行するということは、「並行して」という意味です。マルチコア(マルチプロセッサ)システムでは、パイプされたコマンドが文字通り同時に実行されている場合があります。そうでない場合、オペレーティングシステムのスケジューラはそれらの間でタイムスライスを実行します。

コマンド、たとえば " a | b"を指定すると、シェルはパイプを作成し、2つのコマンドの両方abstdioをリダイレクトして開始し、パイプの出力からstdinを読み取りaながら、そのstdoutをパイプの入力に書き込みます。パイプは、パイプがいっぱいになる前にしばらくの間書き込むことができるようにb、オペレーティングシステムによって一定量のバッファリングを使用して実装されますが、パイプがいっぱいになると、新しい書き込みのブロックを解除するのに十分な読み取りが行われるまで、OS内で新しい書き込みがブロックされます。利用可能なデータよりも多くのデータを読み取ろうとすると、より多くのデータが書き込まれるまで、またはパイプが閉じるまで、たとえば終了するまでブロックます。 abbaa

変数置換

単語にドル記号「$」が含まれている場合、次の文字が変数の名前として使用され、参照はその変数の値に置き換えられます。参照の接尾辞として入力されるさまざまな編集演算子を使用すると、パス名の編集(たとえば、 " :e"で拡張子のみを抽出する)やその他の操作が可能になります。

引用とエスケープ

引用メカニズムを使用すると、空白、ワイルドカード、括弧、ドル記号などの特殊文字をリテラルテキストとして使用できます。

  • \次の文字を通常のリテラル文字として使用することを意味します。
  • "文字列"は弱い引用符です。囲まれた空白とワイルドカードはリテラルと見なされますが、変数とコマンドの置換は引き続き実行されます。
  • '文字列'は強力な引用符です。囲まれた文字列全体がリテラルと見なされます。

コマンド置換

コマンド置換により、あるコマンドの出力を別のコマンドの引数として使用できます。

  • `コマンドとは、コマンド`の出力を取得し、それを単語に解析して、コマンドラインに貼り付けることを意味します。

バックグラウンド実行

通常、Cシェルはコマンドを開始すると、コマンドが終了するのを待ってから、新しいコマンドを入力できることを通知する別のプロンプトをユーザーに提供します。

  • commandは、バックグラウンドでコマンド &を開始し、すぐに新しいコマンドの入力を求めることを意味します。

サブシェル

サブシェルは、現在の状態を継承するシェルの個別の子コピーですが、親に影響を与えることなく、現在のディレクトリなどに変更を加えることができます。

  • ( コマンドは、サブシェルでコマンド )を実行することを意味します。

制御構造

Cシェルは、条件テスト反復の両方の制御構造を提供します。条件テストの制御構造は、ifステートメントとswitchステートメントです。反復制御構造は、while、foreach、およびrepeatステートメントです。

ifステートメント

ifステートメントには2つの形式があります短い形式は1行で入力されますが、式がtrueの場合、指定できるコマンドは1つだけです。

if  コマンド

long形式では、then、else、およびendifキーワードを使用して、コマンドのブロックを条件内にネストできるようにします。

if   expression1  then
    コマンド
else if   expression2  then
    コマンド
    ..。
else
    コマンド
endif

elseとifキーワードが同じ行に表示される場合、それらをネストするのではなく、cshチェーンします。ブロックは単一のendifで終了します。

switchステートメント

switchステートメントは、文字列をパターンのリストと比較します。パターンのリストには、ワイルドカード文字が含まれている場合があります。一致するものがない場合は、デフォルトのアクションが実行されます(存在する場合)。

switch   string 
    case pattern1:
        コマンド
        breaksw
    ケースパターン2:
        コマンド
        breaksw
        ..。
    デフォルト
        コマンド
        breakswendsw 
_

whileステートメント

whileステートメント式を評価します。trueの場合、シェルはネストされたコマンドを実行し、式がtrueである限り繰り返されます。

while  
    コマンド
終わり

foreachステートメント

foreachステートメントは、値のリスト(通常はワイルドカードによって生成されたファイル名のリスト)を受け取り、それぞれについて、ループ変数をその値に設定し、ネストされたコマンドを実行します。

foreachループ変数値のリスト
    コマンド
終わり

ステートメントを繰り返す

repeatステートメントは、1つのコマンドを整数回繰り返します。

整数コマンド
を繰り返す

変数

Cシェルは、シェル変数と環境変数の両方を実装します。[14]ステートメントを使用して作成された環境変数は、setenv常に単純な文字列であり、子プロセスに渡されます。子プロセスenvp[]は、への引数を介してこれらの変数を取得しますmain()

setorステートメントを使用して作成されたシェル変数は、@Cシェルの内部にあります。それらは子プロセスに渡されません。シェル変数は、単純な文字列または文字列の配列のいずれかです。一部のシェル変数は事前定義されており、さまざまな内部Cシェルオプションを制御するために使用されます。たとえば、ワイルドカードが何にも一致しない場合にどうなるかなどです。

cshの現在のバージョンでは、文字列は任意の長さで、数百万文字になる可能性があります。

Cシェルは、Cから借用した演算子を使用して、32ビット整数式の文法を実装しますが、文字列の比較やファイルシステムのテスト(ファイルの存在のテストなど)のためにいくつかの追加の演算子を使用します。演算子は、オペランドから空白で区切る必要があります。変数は$nameとして参照されます。

演算子の優先順位もCから借用されていますが、一連の等しい優先順位の演算子の最初に来るもののあいまいさを解決するために、異なる演算子の結合性ルールが使用されています。Cでは、結合法則はほとんどの演算子で左から右です。Cシェルでは、右から左です。例えば、


//左からCグループinti = 10/5 * 2 ;       
printf "%d \ n " i ); // 4 i = 7-4 + 2出力します;    
      
printf "%d \ n " i ); // 5 i = 2 >> 1 << 4 ;を出力します    
      
printf "%d \ n " i ); //16を出力します    
#右からのCシェルグループ
@ i  = 10/5 * 2
 echo  $ i  #1 
@ i  = 7-4 +2
を出力echo  $i  #1 
@ i  =   2 >> 1 << 4 
echo  $iを出力 #0を出力します

Cシェルの例の括弧は、ビットシフト演算子がI/Oリダイレクト演算子と混同されないようにするためのものです。どちらの言語でも、明確にするためだけであっても、括弧を使用して、評価の目的の順序を明示的に指定できます。

レセプション

Stephen Bourne自身は、cshがインタラクティブな使用に関して彼のシェルより優れていることを認めましたが[ 15]、スクリプト作成でこれほど人気が​​あったことはありません。当初、そして1980年代まで、cshがすべてのUnixシステムに存在することを保証することはできませんでしたが、shは可能でした。そのため、他のマシンで実行する必要のあるスクリプトに適しています。1990年代半ばまでに、cshは広く利用可能になりましたが、スクリプトにcshを使用することは、POSIX委員会による新たな批判に直面しまし[ 16 ]Cシェルも他の人からの批判に直面しました[17] [18]構文の欠陥、機能の欠如、実装の不備など、Cシェルの主張を覆します。

  • 構文上の欠陥:一般的に単純でしたが、言語の定義に不必要な矛盾がありました。たとえば、、setおよびsetenvコマンドaliasはすべて基本的に同じことを行いました。つまり、名前を文字列または単語のセットに関連付けます。しかし、3つすべてにわずかではあるが不必要な違いがありました。またはには等号が必要でしたが、 ;には必要ありsetませんでした。単語リストの前後には括弧が必要でしたが、またはなどは必要ありませんでした。同様におよびループ構造は、ネストされたブロックを終了するために不必要に異なるキーワード(、、および)を使用します。setenvaliassetsetenvaliasifswitchendifendswend
  • 欠落している機能:最も一般的に引用されているのは、stdioファイルハンドルを個別に操作する機能と機能のサポートの欠如です。Bourneシェル関数にはローカル変数しかありませんでしたが、ほとんどのフロー制御構造では改行を認識する必要がありましたが、Cshのエイリアス(Cshで関数に最も近い類似物)は1行のコードに制限されていました。その結果、Cプログラム自体のようにCshスクリプトを機能的に分解することができず、大規模なプロジェクトはBourneシェルスクリプトまたはCコードのいずれかに移行する傾向がありました。
  • アドホックパーサーを使用した実装は、最も深刻な批判を集めています。1970年代初頭までに、コンパイラ技術は十分に成熟し[19]、ほとんどの新しい言語実装は、完全に再帰的な文法を認識できるトップダウンまたはボトムアップパーサーのいずれかを使用していました。Cシェルの代わりにアドホックデザインが選択された理由は不明です。Joyが2009年のインタビューで述べたように、「Unixでこのようなことを始めたとき、私はあまり優れたプログラマーではなかった」ということかもしれません。[20]アドホックな設計は、Cシェル言語が完全に再帰的ではないことを意味しました。処理できるコマンドの複雑さには限界がありました。

これはほとんどのインタラクティブに入力されたコマンドで機能しましたが、ユーザーがスクリプトで記述するより複雑なコマンドの場合、簡単に失敗し、不可解なエラーメッセージまたは望ましくない結果しか生成されない可能性があります。たとえば、Cシェルは制御構造間の配管をサポートできませんでした。foreachコマンドの出力をパイプで送ろうとしても、うまくいきgrepませんでした。(パーサーに関連する多くの苦情に対して機能する回避策は、コードを個別のスクリプトに分割することです。を別のスクリプトforeachに移動すると、スクリプトはcshの新しいコピーをフォークすることによって実行されるため、配管が機能します。正しいstdioハンドルを継承します。)

もう1つの例は、次のフラグメントの望ましくない動作です。これらは両方とも、「「myfile」が存在しない場合は、「mytext」を書き込んで作成する」という意味のようです。ただし、右側のバージョンでは常に空のファイルが作成されます。これは、Cシェルの評価順序が、各コマンドラインを読み取るときにI / Oリダイレクト演算子を検索して評価してから、残りの行に含まれているかどうかを確認するためです。制御構造。


  !-e myfile then echo mytext> myfileの場合、期待どおりに機能します  
   
endif

# (!-e myfile echo mytext> myfile
の場合 、常に空のファイルを作成します 
#回避策
if  !-e myfile  eval  "echo mytext> myfile"

実装は、「0イベントが見つかりません」などの悪名高いエラーメッセージについても批判されており、問題に関する有用な情報は得られません。

ただし、練習することで、これらの欠点を克服することができます(したがって、スクリプトの実装に関して、より適切で安全なアプローチを取るようにプログラマーに指示します)。

   :<myfile  >&/ dev / null && echoファイルが存在します。 ||   echo mytext> myfile  >&/ dev / null && echoファイルが作成されました。 ||  echoファイルを作成できません。

影響力

Windows7デスクトップ上の64ビットHamiltonCシェル。

Cシェルは、履歴メカニズム、エイリアスtilde表記、インタラクティブなファイル名補完、シェルに組み込まれた式の文法など、他のUnixシェルによってコピーされた多くの革新を導入することに非常に成功しました。しかし、 kshbashを含む多数の独立して開発されたクローンを生み出したshとは対照的に、2つのcshクローンしか知られていません。tcshは元々Bill Joyによって作成されたcshコードに基づいていたため、クローンとは見なされません。)

1986年、AllenHolubはOnCommand :Writing a Unix-Like Shell for MS-DOS[21]彼が書いた「SH」と呼ばれるプログラムを説明する本を書きましたが、実際にはshではなくcshの言語設計と機能をコピーしました。 。SHおよびUnixライクなユーティリティ(cat、cp、grepなど)の基本セットの完全なソースを含むコンパニオンディスケットは、発行元からそれぞれ25ドルと30ドルで入手できました。HolubのSHの制御構造、表現文法、履歴メカニズム、およびその他の機能は、Cシェルのものと同じでした。

1988年、HamiltonLaboratoriesはOS/2用のHamiltonCシェルの出荷を開始しました。[22] cshクローンとUnixライクなユーティリティのセットの両方が含まれていました。1992年に、ハミルトンCシェルがWindowsNT用にリリースされました。[23] Windowsバージョンは引き続き積極的にサポートされていますが、OS /2バージョンは2003年に廃止されました。[23] 1990年初頭のクイックリファレンス[24]は、この意図を「Cシェル言語全体(ジョブ制御を除く)に完全に準拠している」と説明しています。)」ですが、言語設計が改善され、UnixとPCの違いに適応しています。最も重要な改善は、許可されたトップダウンパーサーでしたネストまたはパイプされる制御構造。アドホックパーサーを考えると、元のCシェルではサポートできませんでした。ハミルトンは、組み込みおよびユーザー定義のプロシージャ、ブロック構造化ローカル変数、浮動小数点演算などの新しい言語機能も追加しました。PCへの適応には、PCでのファイル名やその他の規則のサポート、およびパイプラインのセットアップなどで 並列処理を実現するためのフォーク(OS / 2またはWindowsでは使用できなかった)の代わりにスレッドを使用することが含まれていました。

も参照してください

参照

  1. ^ Zoulas、クリストス(2016年11月24日)。「tcsh-6.20.00が利用可能になりました!」mx.gw.com2016年11月25日にオリジナルからアーカイブされました2016年11月24日取得
  2. ^ Harley Hahn、 HarleyHahnのUnixおよびLinuxガイド
  3. ^ Berkeley Engineering Lab Notes、第1巻、第2号、2001年10 月2010年7月9日にウェイバックマシンでアーカイブされました。
  4. ^BillJoy よるCシェルの紹介
  5. ^ Ubuntu-パッケージcshの詳細Packagings.ubuntu.com。
  6. ^ Debian-パッケージcshの詳細Packagings.debian.org。
  7. ^ Ubuntu-パッケージtcshの詳細Packagings.ubuntu.com。
  8. ^ Debian-パッケージtcshの詳細Packagings.debian.org。
  9. ^ ケングリア(1983年10月3日)。「コマンドとファイル名の認識/完了を備えたCシェル」ニュースグループ:  net.sources 2010年12月29日取得
  10. ^ tcsh(1)のマニュアルページtcsh。
  11. ^ 2000年6月17日tcshのファイルを修正。
  12. ^ Re:Late Bloomersは、1989年12月17日、英国UCW AberystwythのCS部門、Piercarlo"Peter"Grandiによるcomp.lang.miscへのUSENET投稿を再検討しました。
  13. ^ 「バング、バング」と発音
  14. ^ トロイ、ダグラス(1990)。UNIXシステムコンピューティングの基礎。ベンジャミン/カミング出版社。p。25。
  15. ^ Bourne、Stephen R.(1983年10月)。「Unixシェル」BYTEp。187 2015年1月30日取得
  16. ^ IEEE Standard for Information Technology、Portable Operating System Interface(POSIX)、Part 2:Shell and Utilities、Volume2IEEE Std 1003.2-1992、pp.766-767。 ISBN1-55937-255-9 _ 
  17. ^ トムクリスチャンセンによって有害で​​あると考えられたCshプログラミング
  18. ^ BruceBarnettによるCシェルを使用しないトップ10の理由
  19. ^ デビッド・グリース(1971)。 デジタルコンピュータ用のコンパイラ構築。ジョン・ワイリー&サンズ。ISBN0-471-32776 -X 
  20. ^ ビル・ジョイ、ブレント・シュレンダーとの会話、チャーチルクラブ、サンタクララ、カリフォルニア州、2009年2月11日 2010年3月30日ウェイバックマシンでアーカイブ
  21. ^ Holub、Allen(1986–1987)。コマンドについて:MS-DOS用のUnixライクなシェルの作成(第2版)。M&T Books、カリフォルニア州レッドウッドシティー。ISBN  0-934375-29-1
  22. ^ ハミルトン、ダグラス。「ハミルトンCシェルの発表」(PDF)IBM Personal Systems Developer(1989年夏):119–121 2020年7月11日取得
  23. ^ a b ハミルトン、ニコール(2017年3月5日)。「Windows用ハミルトンCシェルリリースノート5.2.g」ハミルトン研究所、ワシントン州レドモンド2018年4月3日取得
  24. ^ ハミルトンCシェルクイックリファレンス(PDF)ハミルトン研究所、マサチューセッツ州ウェイランド。1988–1990 2020年7月11日取得

さらに読む

外部リンク