情報科学概論
2000.5.2
script/hello.rb
となる。パスの初めにディレクトリを表す/(スラッシュ)が無い場合には相対パスを示している。また、scriptディレクトリにいるときには、ホームディレクトリは
..
で表現され、IMの設定ファイルは
../.im/Config
のように表現される。使っていくうちに慣れてくるので、cdでディレクトリを移動するときには試してみること。
実際には、上記のようなフォルダを用いたディレクトリの表示はTkDeskというファイルマネージャにより確認できる。Ktermなどから
前回のスクリプト作成作業およびエレクトロニクスセミナーAにおける設定ファイルの編集の際にファイルの所在に関する混乱が多く見られた。ディレクトリ構造を把握していないための混乱と思われるので、今一度、ディレクトリに関して復習しておく。
ディレクトリのイメージはMacやWinで用いられているフォルダを使うとわかりやすいかもしれない。(もっとも、それらのフォルダは、ディレクトリをユーザが理解しやすいように考えられたメタファーである。)図1に示すように、フォルダの中にまたフォルダを入れて(内包する、という)分類することが可能であり、ファイルは書類、ディレクトリはフォルダとして階層的に整理することができる。
ここで、ホームディレクトリに自分がいるときに、hello.rbというファイルを示す相対パスは
tkdesk &
とするか、ランチャーからFilesを左クリックするとTkDeskが起動する。起動時には自分のホームディレクトリが表示されるので、ファイルの構成を確認してみること。なお、このとき、Ktermなどで
ls -F
などとして、その相関を見てみること。実際にTkDeskにより/usrディレクトリを階層的に表わした例を図2に示す。
図2 TkDeskの画面
/usrディレクトリにはXで使用するアプリケーションはじめたくさんのファイルが格納されていることがわかる。
Emacsの環境の中で全ての操作を行うことがLinuxらしい使い方であることは再三説明しているが、このようなファイル表示に関してもEmacsは利用できる。まずは、XEmacsを起動して、ボタンバーの中のDiredボタンをクリックする。目的とするディレクトリを聞かれるので適当に選択(マウスでクリック、その後、Enterキーを押す)していくと、ディレクトリ表示モード(図3)になる。
図3 XEmacsによるDiredモードの表示
ls -l
としたときの表示と同じ表現が使われている。ディレクトリ操作も可能であるが、ここではまずは表示を行ってみて、感覚をつかむこと。慣れてくると、各種の作業が出来るようになるが、そのためにはなるべく頻繁に作業を行い、動作の仕組みを理解する必要がある。また、日常の操作でもlsによるファイル表示やcdによるディレクトリ移動、cp/mvなどファイルの変更コマンドをなるべく使うようにしてみよう。
一部の人は先週の作業は全部終わっていると思われるが、結構多くの人がやり残している様なので、もう一度先週の作業を確認する。
はじめに、Ktermなどで
cd ~
として、ホームディレクトリに戻る。現在のディレクトリを確かめるコマンド
pwd
により、
/amd/sv003/virtual/home/b00xx
もしくは
/virtual/home/b00xx
と表示されれば大丈夫である。次に、
ls -F
を行い、ホームディレクトリ内にscript/ディレクトリが存在するか確認する。もし、ディレクトリが無ければ
mkdir script
cd script
として、二つのコマンドによりディレクトリを作成し、移動する。すでに、scriptディレクトリがある場合には、cdコマンドによりscriptディレクトリへ移動する。そのディレクトリの中から
xemacs hello.rb &
として、hello.rbという名前のスクリプトを作成する準備をする。
XEmacsが起動したら、テキスト入力エリアに
print "Hello World\n"
と入力する。ここで、赤で記した斜線は「バックスラッシュ」と呼ばれる記号で、キーボードの右下角の方にある。webテキストの方はちょうどいいフォント(文字の字形)が無かったので、2バイト文字のバックスラッシュを使っているため、そのままコピーしたのでは本来の動作をしない。自分で入力する際は注意すること。入力が終わったら、
C-x C-s
もしくはSaveボタンで作成したスクリプトを保存する。再びKtermのウィンドウに戻り、
ruby hello.rb
というコマンドを実行してみる。画面にどのような文字列が表示されただろうか?
今実行したのは「Hello Worldという文字列を標準出力に出力しなさい」という命令文をRubyというインタープリタが解釈した結果である。実は、今作成したhello.rbの内容はPerlという別のスクリプト言語と同じ構文なので、
perl hello.rb
としても、同じ動作をする。ここで、UNIX系のOSにおいては、ほとんどの場合ファイル名の.*のような拡張子は特定のアプリケーションと相関が無いことに気付いただろうか。拡張子が.rbでも.plでも動作に影響はない。
さて、スクリプト(台本)と言うからには、今のようにいちいちコマンドを与えているようでは物足らない。特定の筋書きに沿った動作を自動的に行うには以下のような作業が必要である。
XEmacsのウィンドウに戻り、ファイルの先頭に
#!/usr/bin/ruby
# Hello World
を付け加える。一行目の#!で始まる行はruby本体が格納されている場所の絶対パスを示し、シェルにRubyの所在を教えている。二行めは#で始まっているが、多くのスクリプト言語と同様にRubyにおいても#で始まる行はコメント行として実際の動作に関係ない。
ファイルの修正が終わったら、
C-x C-s
で保存し、Ktermのウィンドウに戻る。ls -lというコマンドを実行すると
-rw-rw-r-- 途中省略 hello.rb
という属性になっているはずである。このままでは、実行権限が無いのでこのスクリプトは動作しない。そこで、前に説明したchmodコマンドを利用して
chmod u+x hello.rb
を実行し、実行属性を与える。ls -lで実行属性を確認したら
./hello.rb
として動作を確認する。属性変更が正しく行われていれば先程と同様にKtermの
Hello World
が表示されたはずである。
ここで、先程のファイル名の先頭に./が付いている。「.」は以前に相対パスのところで説明したカレントディレクトリを意味する記号である。通常のコマンド(lsやpwdはじめ、ほとんどの場合)は/usr/binディレクトリにコマンドが格納されている。本来は/usr/bin/lsとなるが、それでは面倒なのでPATHという変数を設定することにより、特定のディレクトリに関しては絶対パスを記述しなくてもコマンドが動作するようになっている。そのPATHの内容は、
export
により見ることが出来るが、通常は自分のホームディレクトリ及びその下に位置するディレクトリにはPATHが通っていない。そこで、現在のscriptディレクトリにあるhello.rbというコマンドであることを明示しないとシステムはコマンドのありかを理解できないので、./を先頭につけて現在のディレクトリにあるコマンドであることを教える必要がある。
ちなみに、先程のhello.rbをXEmacs上で一行目を
#!/usr/bin/perl
として、
C-x C-w
により、hello.plという名前で保存し、同様にKterm上で
./hello.pl
としても同じ結果が表示される。しかし、今回は表示を行ったのは別のスクリプト言語であるPerlである。
先程よりスクリプトという言葉が多く出てくるが、スクリプト言語でないC言語ではどうなるであろうか。XEmacsのウィンドウに戻り、
C-x C-f
の操作により新しいファイルを開く。ファイルの名前をhello.cとしておく。ファイルの中身は以下のようにする。
/* Hello World*/
#include <stdio.h>
main()
{
printf("Hello World\n");
}
入力が終わったら、
C-x C-s
で保存し、次にコンパイルという作業を行う。LinuxではフリーのCコンパイラとしてgccというコマンドが用意されているので、
gcc hello.c
とすると、何もエラーが無ければgccはすぐに終了し、同じディレクトリにa.outというファイルが作成される。この属性は自動的に実行属性が付与されており、
./a.out
により、同じようにHello Worldを表示する。ただし、ここで実際に行ってみたように、C言語においてはコンパイルという作業を通して実行ファイルを作成しないと実際には動作しない。スクリプト言語の手軽さがわかると思う。
これに関しては教科書に沿って、適宜、必要事項を補足する。また、スクリプトに関してはその都度、液晶ディスプレイに作業を写しながら行う。
作業の進捗状況によって課題を課すことがあるのでアナウンスには気をつけること。
目次ページに戻る