2022年6月21日のシェルスクリプトについての授業の教材で、 csh と bash についての記述がまざってしまっていたので、 それを整理しながら補足する。
注意: 確認が不じゅうぶんなところがあります。今後、確認しながら改訂するつもりです。
Linux は、いわば「Unix系」の (Unix の仕様にならってつくられた) OS (オペレーティングシステム) である。 Unix系のOSは、カーネル (kernel、核) と シェル (shell、殻) からなっている。 ユーザーのコマンドをうけつけるところはシェルであり、 ユーザーはカーネルと直接かかわることはほとんどない。 同じ OS に複数のシェルがあり、ユーザーがこのみに応じて選択できることがある。
Unix で最初につくられたシェルは「sh」というプログラム名で、 他のものと区別するときは、ボーン (Bourne) シェルとよばれることがある。 つぎに「csh」(C shell) というものがつくられた。 その文法が (ちょっとだけ) C言語ににているからそうよばれたらしい。 その後、sh の上位互換の (sh でできることは同じ形式でできて、さらに追加の機能がある) 「bash」や、csh の上位互換の「tcsh」がつくられた。 いまどきの Linux では「sh」で bash が、「csh」で tcsh がうごくのがふつうになっている。
ここでは「bash」と「csh」で代表させることにする。 bash と csh の機能はだいたいおなじだが、文法がすこしちがう。 (ドイツ語と英語、あるいはフランス語と英語とのちがいと、ちょっとにたところがある。)シェルは、対話型利用のほかに、 コマンドを列挙したテキストファイル (「シェルスクリプト」という) をつくっておき、 シェルにあたえて、まとめて実行させる、というつかいかたがある。
シェルスクリプトを実行させるには、つぎのような方法がある。
シェルでは、コマンドに出てくる文字列をくみたてるプログラミングができる。 そのための「シェル変数」がある。 また、「環境変数」というものがある。 これは、シェルスクリプトどうしで共通につかわれる変数である。 (環境変数は、各計算機上のユーザーに共通なローカル標準設定をあたえるためにもつかわれる。 自分で環境変数を設定するときには、ローカル標準設定にあるものをへたにかえてしまわないように 注意する必要がある。)
コマンドとして実行される文ではなく、シェルのなかの演算をする文について、 bash と csh の文法には、つぎのようなおおまかなちがいがある。
このページの例文にかぎって、空白 (space) を「␣」であらわす。 【「␣」という記号は、漢字などと同じ「全角」の文字幅で表示されてしまうが、 例文でその記号があらわすのは、 日本語文字セットにある空白 (いわゆる「全角の空白」) ではなく、 いわゆる「英数」文字セットにある空白 (いわゆる「半角の空白」) である。】
(bash, csh とも) シェル変数名のまえに「$」をつける。 とくに、端末画面に表示させたいならば
(bash, csh とも) 「env」 で表示される。
コマンドに別名 (略称のようなもの) をつけることができる。
この授業では、つぎのような目的で alias をつかう。 授業では、Python の version 3 をつかいたいのだが、 授業用につかう Linux サーバーでは、 「python」とすると Python の version 2 がうごいてしまう。 Version 3 は anaconda というパッケージの一部としてインストールされたので、 /usr/bin/anaconda3/bin/python となっている。 これを「python3」で実行できるようにする。
ログインしたとき起動される bash で実行できるようにするために、 各自のホームディレクトリにある「.bashrc」 (最初の字はピリオド) というファイルに、 この alias 文 (bash用の形) をいれた。
csh によるシェルスクリプトでは、この alias 文 (csh用の形) を、 シェルスクリプトの頭 (「#!/bin/csh」のつぎ ) に入れてほしい。
1980年代、対話型には csh、シェルスクリプトには sh がよいといわれていた。 しかしわたしは、ログインすると csh がうごいている計算機で Unix をつかいはじめ、 複数のシェルをおぼえる時間がおしかったので、シェルスクリプトも csh でかいてしまった。 ところが、2012年ごろ、あらたにインストールした Linux は、 ログインすると bash がうごいていた。 わたしはそのままつかうことにし、シェルスクリプトも bash 用にかきなおすことにした。
このような変化は、増田にかぎらず、ありがちなことのようだ。 地球科学で地図上にデータを表示するのによくつかわれる GMT (Generic Mapping Tools) というソフトウェアの例文のシェルスクリプトは、 1990年代には csh のスクリプトだったが、 いまは bash のスクリプトがおもになっている。